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

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″>结论: 内嵌之后,可以增加判断条件,增加了装饰器的灵活性。

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/kaifa/python/20200802/7804.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部