python函数之闭包

2023-02-02  本文已影响0人  讲武德的年轻人

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

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

上一篇 下一篇

猜你喜欢

热点阅读