闭包作用
其外部作用域已经释放的情况下,内部方法或相应属性贮存在内存中,从而用于函数封装,或减少函数参数问题
闭包例子
与nonlocal的协同使用
a = 0
print('1',(id(a)))
def func1():
a = 1
print('2', id(a))
def func2():
nonlocal a # 当后续无需修改a变量时,闭包函数会直接处理相关的变量引用,但若需要修改变量时,需要显示申明变量为nonlocal。因为闭包处理时仅保留变量的引用,不可修改。
print(id(a))
# global a
a = 2
print('closure a: ',a)
print(f'func1_a: {a}')
func2()
print(f'after func2, func1_a: {a}')
func1()
1 2571046971664
2 2571046971696
func1_a: 1
2571046971696
closure a: 1
after func2, func1_a: 1