用一句话说说什么是闭包:
闭包本质上是一个函数,如果在一个函数内部,嵌套了函数,这个内部函数对(非全局作用域)外部作用域的变量进行引用,那么这个内部函数称为闭包。闭包使得这些变量的值始终保存在内存中。
其中闭包有时常常涉及到一个关键字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())
参考: