当前位置:首页 > Python教程 > python技巧

Python中带参数的装饰器

装饰器本身是用来是为一个函数是实现新的功能,并且不改变原函数的代码以及调用方式。

遇到这样一种问题:

众多函数调用了你写的装饰器,但客户有需求说,我想实现我可以随之控制装饰器是否生效。

那你就不可能在得到命令的时候去原函数头部去做删除和添加装饰器调用的命令。这是就可以用到带参数的装饰器,定义一个开关,调用装饰器的时候,把这个装饰器的开关参数给传递进去,这样当开关打开的时候装饰器生效,关闭的时候则只执行原函数的代码。

 

举例:开关参数为True的时候执行过程:

             1 F = True          #step 1 装饰器的开关变量 2def outer(flag):  #step 2 3def wrapper(func): #step 4 4def inner(*args,**kwargs): #stpe 6 5if flag:               #step 9 6print(before)   #step 10 7                 ret = func(*args,**kwargs)  #step 11  执行原函数 8print(after)             #step13 9else:
10                 ret = func(*args,**kwargs)
11print(123)
12return ret                     #step 1413return inner    #step 714return wrapper     #step 51516 @outer(F)   #先执行step 3 :outer(True)这个函数,然后step 6:@wrapper   #此处把开关参数传递给装饰器函数17def hahaha():
18pass#step 1219 hahaha()    # step 8    相当于inner()

开关参数为False的时候执行过程:

             1   F = False          #stpe1 装饰器的开关变量 2def outer(flag):  #step 2 3def wrapper(func): #step 4 4def inner(*args,**kwargs): #stpe 6 5if flag:               #step 9 6print(before)   
 7                   ret = func(*args,**kwargs)    
 8print(after)             
 9else:
10                  ret = func(*args,**kwargs)    #step 10  执行原函数11print(123)                 #step 1212return ret                     #step 1313return inner    #step 714return wrapper     #step 5

 

原文:http://www.cnblogs.com/eric_yi/p/7255455.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐