python 闭包

https://www.jianshu.com/p/3502bdf5485e



def adder(x):
    zz = 100
    def wrapper(y):
        return x + y + zz
    return wrapper


adder5 = adder(5)
print(adder5(10))
print(adder5.__closure__)
print("",len(adder5.__closure__))

for i in adder5.__closure__:
    print(i.cell_contents)


115
(, )
2
5
100

闭包避免了使用全局变量,此外,闭包允许将函数与其所操作的某些数据(环境)关连起来。这一点与面向对象编程是非常类似的,在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。

一般来说,当对象中只有一个方法时,这时使用闭包是更好的选择。来看一个例子:

 

这比用类来实现更优雅,此外装饰器也是基于闭包的一中应用场景。

所有函数都有一个 __closure__属性,如果这个函数是一个闭包的话,那么它返回的是一个由 cell 对象 组成的元组对象。cell 对象的cell_contents 属性就是闭包中的自由变量

 

把闭包里面的数据都存在了 所有函数都有的一个属性  __closure__ 的 cell_contents 里面。。

 


 

你可能感兴趣的:(Python,知识点)