python函数之闭包

个人认为,这是一个较好的闭包的例子,典型的可以表明闭包的数据存储功能。首先,这是一个嵌套函数,外层函数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

个人理解,难免有偏差,欢迎评论交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。