闭包
概念:函数嵌套的前提下,内层函数引用了外层函数的变量(包括参数),外层函数, 又把 内层函数 当做返回值进行返回,这个内层函数+所引用的外层变量, 称为 "闭包"
应用场景,外层函数, 根据不同的参数, 来生成不同作用功能的函数
注意事项
- 闭包中, 如果要修改引用的外层变量,需要使用 nonlocal 变量 声明,否则当做是闭包内, 新定义的变量
- 当闭包内, 引用了一个, 后期会发生变化的变量时, 一定要注意,函数, 是被调用时, 才去确定变量标识所对应的值
示例:
def test():
func = []
for i in range(1, 4):
def test2():
print(i)
func.append(test2)
return func
newFunc = test()
print(newFunc)
newFunc[0]()
newFunc[1]()
newFunc[2]()
# 结果
[<function test.<locals>.test2 at 0x0000024BF15CD798>, <function test.<locals>.test2 at 0x0000024BF1719A68>, <function test.<locals>.test2 at 0x0000024BF16F5708>]
3
3
3
def test():
func = []
for i in range(1, 4):
def test2(num):
def inner():
print(num)
return inner
func.append(test2(i))
return func
newFunc = test()
print(newFunc)
newFunc[0]()
newFunc[1]()
newFunc[2]()
#结果
[<function test.<locals>.test2.<locals>.inner at 0x000001C99E825708>, <function test.<locals>.test2.<locals>.inner at 0x000001C99E949A68>, <function test.<locals>.test2.<locals>.inner at 0x000001C99E825798>]
1
2
3