什么是闭包

# 函数内部定义函数
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

results matching ""

    No results matching ""