加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 编程开发 > Python > 正文

python装饰器带括号和不带括号的语法和用法

发布时间:2020-08-02 17:33:29 所属栏目:Python 来源:互联网
导读:装饰器的写法补充:通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号。下面通过两个例子还看。一般装饰器的写法:1 def log(func=None):23 def inner(*args, **kwargs):4 print(do some

<h3 id="装饰器的写法补充" data-source-line="125"><span style="font-size: 18pt;">装饰器的写法补充:
<p data-source-line="126">通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号。下面通过两个例子还看。


<h5 id="一般装饰器的写法" data-source-line="128"><span style="font-size: 14pt;">一般装饰器的写法:
<div class="cnblogs_code">

  log(func=     
      inner(*args,**         (         res = func(*args,**         (              
      
 
       ( 
 
 my_func()

<p data-source-line="150">运行结果:


<div class="cnblogs_code">

   do something after

<h5 id="可以不带括号的装饰器写法" data-source-line="157"><span style="font-size: 14pt;">可以不带括号的装饰器写法
<p data-source-line="158">需要增加判断在函数内,用于判断使用装饰器的函数是否可以调用,以达到括号的自由写法


<p data-source-line="160">判断的装饰器写法


<div class="cnblogs_code">

  log(func=     
     
               inner(*args,**             (             res = fun(*args,**             (                      
              
     
      func                   
     
                   
 
 
 
        ( 
        ( 
 
 
 my_func()

<p data-source-line="201">两种方式的一样,运行结果:


<div class="cnblogs_code">

1 do something before
2 i am my_func
3 do something after

<p data-source-line="196">不带括号的理解:


<p data-source-line="196">


<div class="cnblogs_code">

@log =>等同于 my_func = log(my_func)

带括号的理解:

@log() =>等同于 my_func = log()(my_func)

<p data-source-line="201">


<p data-source-line="207">结论: 内嵌之后,可以增加判断条件,增加了装饰器的灵活性。

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读