python 带可变参数的装饰器怎么用

然后step 6:@wrapper #此处把开关参数传递给装饰器函数def hahaha(): pass #step 12hahaha() # step 8 相当于inner()开关参数为False的时候执行过程:F = False #stpe1 装饰器的开关变量 def outer(flag): #step 2 def wrapper(func): #step 4 def inner(*args...
python 带可变参数的装饰器怎么用
装饰器本身是用来是为一个函数是实现新的功能,并且不改变原函数的代码以及调用方式。
遇到这样一种问题:
众多函数调用了你写的装饰器,但客户有需求说,我想实现我可以随之控制装饰器是否生效。
那你就不可能在得到命令的时候去原函数头部去做删除和添加装饰器调用的命令。这是就可以用到带参数的装饰器,定义一个开关,调用装饰器的时候,把这个装饰器的开关参数给传递进去,这样当开关打开的时候装饰器生效,关闭的时候则只执行原函数的代码。

举例:开关参数为True的时候执行过程:
F = True #step 1 装饰器的开关变量def outer(flag): #step 2 def wrapper(func): #step 4 def inner(*args,**kwargs): #stpe 6 if flag: #step 9 print('before') #step 10 ret = func(*args,**kwargs) #step 11 执行原函数 print('after') #step13 else: ret = func(*args,**kwargs) print('123') return ret #step 14 return inner #step 7 return wrapper #step 5@outer(F) #先执行step 3 :outer(True)这个函数,然后step 6:@wrapper #此处把开关参数传递给装饰器函数def hahaha(): pass #step 12hahaha() # step 8 相当于inner()开关参数为False的时候执行过程:
F = False #stpe1 装饰器的开关变量 def outer(flag): #step 2 def wrapper(func): #step 4 def inner(*args,**kwargs): #stpe 6 if flag: #step 9 print('before') ret = func(*args,**kwargs) print('after') else: ret = func(*args,**kwargs) #step 10 执行原函数 print('123') #step 12 return ret #step 13 return inner #step 7 return wrapper #step 52017-11-12
mengvlog 阅读 9 次 更新于 2025-07-20 09:46:25 我来答关注问题0
檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部