python装饰器最简释疑

为君一笑 提交于 2019-12-22 02:56:55

背景知识:

  1. 函数可作为变量传递
  2. 函数可作为参数传递
  3. 函数可作为返回值传递

不用装饰器实现函数如下:

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)。

装饰器@就是把被装饰的函数作为参数传递到装饰器函数里面加工,最后执行被装饰函数的时候,就行当与执行了一个加工后的函数。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!