作用域的关系,是在定义阶段确立的。
在调用阶段,不管函数返回到那个位置,到函数最原始定义的时候去找名。
闭包:内部函数包含对外部作用域,而不是全局作用域的名字的调用
1,必须是内部定义的函数的代码,
2,包含对外部作用域的引用,
3,但不是对全局作用域的引用。
x=1 def = f1(): x=2 def f2() print(x) return f2 f=f1() f()
闭包函数:一定是对外部作用域的引用
x=1 def f1(): x=2 y=1 def f2(): print(x) y return f2 f=f1() f() print(f.__closure__[0].cell_contents) print(f.__closure__[1].cell_contents)
返回这个函数f2,并且附加这个函数的作用域,也跟着出来