Python中decorator的使用(@函数的使用)

使用在Python 2.4 or Later.

两种调用形式:
1.不带参数

@A

def  f():

Python最后会处理为:

=  A(f)

,可扩展为:

@A
@B
@C
def  f():

最终Python会处理为:

=  A(B(C(f)))

 

2.带参数:

@A(args)
def  f():

Python会处理为:

def  f();
  _deco 
=  A(args)
  f 
=  _deco(f)

Python先执行A(args)得到_deco,然后跟第一种方式一样的处理函数f。


对应的两种函数定义方法:
第一种:

def  A(func):
  
# 处理func
   # 如func.attr='decorated'
   return  func

@A
def  f(args):  pass

A对f处理完后,仍返回函数对象。 如果要返回一个新的函数,可以为:

def  A(func):
  
# 做额外的工作
   def  new_func(args):
    
# 做额外工作
     return  func(args)  
  
return  new_func

@A
def  f(args):  pass

注意:new_func的定义形式要和待处理的函数相同。

如果想根据原来函数的结果进行一些处理:

def  A(func):
  
def  new_func( * args,  ** argkw):
    result 
=  func( * args,  ** argkw)
    
if  result:
      
return  new_result
    
else :
      
return  result
  
return  new_func

@A
def  f(args):  pass


 

第二种: 

def  A(arg):
  
def  _A(func):
    
def  new_func(args):
      
# do any operation
       return  func(args)
    
return  new_func
  
return  _A

@A(arg)
def  f(args):  pass

文档上说:如果你的decorator在调用时使用了参数,那么你的decorator函数只会使用这些参数进行调用。因此你需要返回一个新的decorator函数,就和第一种方式定义形式一致了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值