Python入门与进阶(11-10)
2018-05-14 本文已影响5人
buaishengqi
11-10 什么是闭包
# 11-10 什么是闭包
def curve_pre():#抛物线函数
def curve():
pass
curve()#这时候调用curve不可以,因为它在函数里面,属于内部函数
# 打印结果如图1
def curve_pre():
def curve():
print('this is a function')
pass
return curve #这个肯定可以返回,函数作为一个返回结果,被另一个函数给返回回来的
f = curve_pre()#可以把函数赋值给另外一个变量!!
f()
# 打印结果如图2
def curve_pre():
a = 25
def curve(x):
return a*x*x
return curve #这个肯定可以返回,函数作为一个返回结果,被另一个函数给返回回来的
f = curve_pre()#可以把函数赋值给另外一个变量!!
print(f(2))
# 打印结果如图3
# 看看下面的执行结果,结果是多少?
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)
# 此时f(2) = curve_pre()
print(f(2))
# 打印结果如图4,为什么结果是100不是40?
# 闭包 = 函数+环境变量
# 闭包和全局变量是有区别的!!
a = 25 #全局变量
def curve_pre():
def curve(x):
return a*x*x
return curve
a = 10
f = curve_pre()#可以把函数赋值给另外一个变量!!
# 此时f(2) = curve_pre()
print(f(2))
# 打印结果如图5
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg