什么是闭包
# 函数内部定义函数
def curve_pre():
def curve():
pass
curve()
看到报错了,因为curve
的作用域只存在curve_pre
中
NameError: name 'curve' is not defined
# 闭包 = 函数+环境变量
# 函数内部定义函数
def curve_pre():
def curve():
print('this is a function')
pass
return curve
f = curve_pre()
f()
this is a function
# 函数内部定义函数
def curve_pre():
a = 25
def curve(x):
return a*x*x
return curve
f = curve_pre()
print(f(2)) #100
a = 10
print(f(2)) #100
# 闭包 = 函数+环境变量
# 函数内部定义函数
def curve_pre():
a = 25
def curve(x):
return a*x*x
return curve
f = curve_pre()
print(f.__closure__)
print(f(2)) #100
(<cell at 0x7fcfe002c310: int object at 0x10937fd90>,)
100
# 闭包 = 函数+环境变量(函数定义时)
# 函数内部定义函数
def curve_pre():
a = 25
def curve(x):
return a*x*x
return curve
f = curve_pre()
print(f.__closure__)
print(f.__closure__[0].cell_contents)
print(f(2)) #100
打印环境变量
(<cell at 0x7ff1981e4310: int object at 0x10e4c3d90>,)
25
100