在函数内再声明一个函数。 内部函数修改外部函数的局部不可变变量,需要关键字nonlocal。对于可变变量可直接访问修改。
def x1() : a = 100 def x2() : nonlocal a a+=100 x2() print(a) x1()依据函数提出的概念,在函数内定义一个内部函数,然后将内部函数进行返回,使之可以在外部进行调用。
def x1() : a = 100 def x2() : nonlocal a a+=100 print(a) return x2 x = x1() x()在闭包的基础上,函数作为参数。
def x1(func) : def x2() : func() print(1) return x2 @x1 def f() : print("xxxxxx") f()f()为被装饰函数,x1()为装饰器 @x1会将被装饰函数f()作为参数传给装饰器x1(),然后执行x1() 又因为x1()返回了函数x2(),所以此时f = x2 执行语句f()时执行了内部函数x2()
当存在多层装饰器时,离得近的先进行装饰
def x1(func) : def x3() : func() print(1) return x3 def x2(func) : def x3() : func() print(2) return x3 @x2 @x1 def f() : print("xxxxxx") f()装饰器也可带参数,需多封装一层(三层),最外层的函数负责接收装饰器参数