谈谈python闭包

用一句话说说什么是闭包:

闭包本质上是一个函数,如果在一个函数内部,嵌套了函数,这个内部函数对(非全局作用域)外部作用域的变量进行引用,那么这个内部函数称为闭包。闭包使得这些变量的值始终保存在内存中。

其中闭包有时常常涉及到一个关键字nonlocal。

一句话说明一下nonlocal的作用:

当一个闭包,即一个嵌套函数引用了外部函数的变量时,需要对外部函数的变量进行修改则在嵌套函数中必须声明该变量为nonlocal的,如果只读方式访问则不需要。
    # coding:utf-8
    
    
    def foo():
        x = 5
    
        def inner():
            nonlocal x
            x += 1
            return x
    return inner
    
    p = foo()
    print(p())
    print(p())
    print(p())

这里的闭包inner()需要修改外部变量x的内容,所以需要在嵌套函数中声明x为nonlocal。

思考一下下面这个程序的结果:

def count():                                                                    
    fs = []
    for i in range(1, 4):def f():
    ┆   ┆   ┆return i*i 
    ┆   fs.append(f)
    return fs

f1, f2, f3 = count()

print (f1())
print (f2())
print (f3())
                        

参考:

https://foofish.net/python-closure.html

猜你喜欢

转载自blog.csdn.net/yrx0619/article/details/83073029