背景知识:
- 函数可作为变量传递
- 函数可作为参数传递
- 函数可作为返回值传递
不用装饰器实现函数如下:
def func():
return '函数func'
def outer(x):
def inner(): # 函数嵌套
return '戴了inner牌帽子的 ' + x() # 跨域访问,引用了外部变量x
return inner # 函数作为返回值
closure = outer(func) # 函数func作为outer的参数;函数作为变量赋给closure
print(func()) # 执行原始函数
print(closure()) # 执行闭包
执行结果:
函数func
戴了inner牌帽子的 函数func
使用装饰器之后函数如下:
def outer(x):
def inner():
return '戴了inner牌帽子的 ' + x()
return inner
@outer
def func():
return '函数func'
print(func())
执行结果:
戴了inner牌帽子的 函数func
对比:
由上,我们可以看到加了outer装饰器的func等价于outer(func)。
装饰器@就是把被装饰的函数作为参数传递到装饰器函数里面加工,最后执行被装饰函数的时候,就行当与执行了一个加工后的函数。
来源:CSDN
作者:HUSTER593
链接:https://blog.csdn.net/qq_36631379/article/details/103648404