函数闭包
- Function Clouse:引用了自由变量的函数既是一个闭包.这个被引用的自由变量和这个函数一同存在,即便它已经离开了创造它的环境也一样.
- 比如下面的函数的返回值
def foo():
I = []
def bar(i):
I.append(i)
return bar
f1 = foo()
f2 = foo()
#实验下列语句执行结果
f1(1)
f1(2)
f2(3)
- 深入一点:
object.__closure__
- 作用域
┌───────────────────────────┐
│ built-in namespace │
├───────────────────────────┤ ↑
│ global namespace │
│ ┌───────────────────────┤
│ │ local namespace │ n = 123
│ │ ┌───────────────────┤
│ │ │ local namespace │ ↑
│ │ │ ┌───────────────┤
│ │ │ │ ... │ print(n)
└───┴───┴───┴───────────────┘
声明全局变量: global
声明非本层的 局部变量 : nonlocal
查看全局变量: globals()
查看局部变量: locals()
查看变量: vars([object]) # 不传参数相当于 locals(), 传入对象后, 会得到 object.__dict__