個人認(rèn)為溢谤,這是一個較好的閉包的例子络凿,典型的可以表明閉包的數(shù)據(jù)存儲功能。首先冈敛,這是一個嵌套函數(shù)待笑,外層函數(shù)counter在其作用域內(nèi)定義了一個變量base,并且外層函數(shù)的返回值是內(nèi)層函數(shù)抓谴,這里注意暮蹂,內(nèi)層函數(shù)用了nonlocal來聲明base:在自己的內(nèi)層函數(shù)作用域內(nèi),使用外層函數(shù)的base變量癌压,而不是又在自己的內(nèi)部作用域定義自己的base仰泻,如此以來,base這個變量在程序運(yùn)行時滩届,就可以保存在內(nèi)存中了集侯。
在編寫代碼中需要附加額外的狀態(tài)給函數(shù)時,一定要考慮使用閉包。
def counter():
base = 0
def inc(step=1):
nonlocal base
base += step
print(base)
return base
return inc
f1 = counter()
f1()
f1()
f1()
f1()
f1()
f1()
f1()
運(yùn)行結(jié)果:
"C:\Program Files\Python37\python.exe" D:/python_pycharm1/1.高階函數(shù).py
1
2
3
4
5
6
7
Process finished with exit code 0
個人理解浅悉,難免有偏差趟据,歡迎評論交流!