閉包作用
其外部作用域已經(jīng)釋放的情況下侮邀,內(nèi)部方法或相應(yīng)屬性貯存在內(nèi)存中秕衙,從而用于函數(shù)封裝,或減少函數(shù)參數(shù)問題
閉包例子
與nonlocal的協(xié)同使用
a = 0
print('1',(id(a)))
def func1():
a = 1
print('2', id(a))
def func2():
nonlocal a # 當(dāng)后續(xù)無需修改a變量時(shí)垄潮,閉包函數(shù)會(huì)直接處理相關(guān)的變量引用桩卵,但若需要修改變量時(shí),需要顯示申明變量為nonlocal劲弦。因?yàn)殚]包處理時(shí)僅保留變量的引用耳标,不可修改。
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