装饰器三个前提

**1. 作用域:**原则:L E G B **2. 高阶函数:**成立条件:①函数作为函数参数输入,或者②函数做为返回值输出; **3. 闭包:**如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

def outer():
    x=10
    def inner():
        print(x)
    return inner

print(outer())
# <function outer.<locals>.inner at 0x00000068BEC8D158>
outer()()
# 10


f=outer()
f()
# 10

如上实例:inner就是内部函数,inner里引用了外部作用域的变量x(x是在外部作用域outer里面,但不是全局变量),则这个内部函数inner就是一个闭包。 闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境,当然这个环境可以有很多,不止一个简单的x。

大家对内容有任何问题,欢迎留言,定在第一时间解答,谢谢大家!