【Class 17】python 进阶-函数式编程-闭包

函数式编程

闭包 = 函数 + 环境变量
闭包的环境变量有一个保存现场的功能,闭包中使用 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 语句
强制声明一个变量不是局部变量

你可能感兴趣的:(Python总结)