個人認為,這是一個較好的閉包的例子,典型的可以表明閉包的數(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這個變量在程序運行時,就可以保存在內(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()
運行結(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
個人理解,難免有偏差,歡迎評論交流!