个人认为,这是一个较好的闭包的例子,典型的可以表明闭包的数据存储功能。首先,这是一个嵌套函数,外层函数counter在其作用域内定义了一个变量base,并且外层函数的返回值是内层函数,这里注意,内层函数用了nonlocal来声明base:在自己的内层函数作用域内,使用外层函数的base变量,而不是又在自己的内部作用域定义自己的base,如此以来,base这个变量在程序运行时,就可以保存在内存中了。
在编写代码中需要附加额外的状态给函数时,一定要考虑使用闭包。
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()
运行结果:
"C:\Program Files\Python37\python.exe" D:/python_pycharm1/1.高阶函数.py
1
2
3
4
5
6
7
Process finished with exit code 0
个人理解,难免有偏差,欢迎评论交流!