闭包
一个函数在调用的时候, 内部的自由变量, 要到这个函数被定义的地方去找, 而不是在这个函数当前被调用的地方去找,这个函数连同它被定义时的环境一起, 构成了一个数据结构, 就是闭包。
闭包传递的是上下文。
形成闭包的条件
- 必须要有一个内嵌函数
- 内嵌函数中要对自由变量的引用
- 外部函数必须返回内嵌函数
name = '张三'
def fun():
def one():
print(name)
return one
f = fun()
f()
闭包是“打通”了上下文 把调用时候的上下文 给定义时候的环境用。
简单来说,定义函数fun、one的时候,都不用处理变量name的定义和赋值问题。name的定义和赋值在最外层调用的时候负责,这样能更好的把代码功能分开。
global
global 把局部变量设置为全局变量
name = '张三'
def fun():
global name
name = '李四'
def fun2():
print(name)
>>> fun2()
张三
>>> fun()
>>> fun2()
李四
>>>
nonlocal
nonlocal 把局部变量,“下放”到上层空间用
name = '张二'
def fun():
name = '张三'
def fun2():
def fun3():
nonlocal name
name = '李四'
print(name)
fun3()
print(name)
print(name)
fun2()
print(name)
fun()
print(name)
>>> fun()
张三
张三
李四
李四
>>> name
'张二'
网友评论