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
上一篇下一篇

猜你喜欢

热点阅读