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

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

dawei

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