函数式编程
闭包 = 函数 + 环境变量
闭包的环境变量有一个保存现场的功能,闭包中使用 nonlocal 声明的局部变量会保存上一次调用的状态,
类似于全局变量
实例一:
def curve_pre():
a = 25
def curve(x):
return a * x * x
return curve
f = curve_pre()
print( f(2) )
执行结果:
100
实例二:
a = 25
def curve_pre():
def curve(x):
return a * x * x
return curve
# 此时将 a 的环境变量修改 为10
a = 10
f = curve_pre()
print( f(2) )
执行结果:
40
实例三:
def curve_pre():
a = 25
def curve(x):
return a * x * x
return curve
# 此时将 a 的环境变量修改 为10
f = curve_pre()
print(f.__closure__)
print(f.__closure__[0].cell_contents)
print( f(2) )
执行结果:
(<cell at 0x0000025519CD0768: int object at 0x00007FF9BB39E650>,)
25
100
global 语句:
如果你想要为一个定义在函数外的变量赋值,
那么你就得告诉Python这个变量名不是局部的,而是 全局 的。
我们使用global语句完成这一功能。
没有global语句,是不可能为定义在函数外的变量赋值的。
实例:
def curve_pre():
global a
a = 20
def curve(x):
return a * x * x
return curve
a = 10;
nonlocal 语句
强制声明一个变量不是局部变量