def f1(flag=1):
def outer(func):
def inner(*args, **kwargs):
if (flag == 2):
print("______%d" % flag)
ret = func(*args, **kwargs)
else:
print("______%d" % flag)
ret = func(*args, **kwargs)
return ret
return inner
return outer
@f1(2)
def test(a):
return a ** 2
print(test(3))
#输出结果
______2
9
当当需要通过不同参数判断装饰器该实现的不同结果时,带参数的装饰器就出现了,如上所示,在装饰器最外层在嵌套一个函数用与接收参数,通过第 4 行判断参数选择相应的功能
下面说说 14行 的执行流程 1)@f1(2) --> f1(2) 执行 f1函数并传值 2 ; 2)f1 函数返回 outer --->@outer;3)@outer --> test = outer(test)
以上就是我对装饰器的一些个人理解了。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx