python之闭包

标签: python

函数闭包

一般函数执行结束时该函数的局部变量会消失,假如,我们希望先保留函数中的临时局部变量,这时候就可以用上闭包了,

闭包其实就是能够读取其他函数内部变量的函数,闭包实际就是python装饰器的原理

 

我们在开发中能尽量避免使用全局变量的就尽量避免使用。因为不同模块,不同函数都可以自由的访问全局变量,可能会造成全局变量的不可预知性。

闭包避免了使用全局变量,此外,闭包允许将函数与其所操作的某些数据(环境)关连起来。而且使用闭包,可以使代码变得更加的优雅

 

形成闭包的条件:

1.在一个外函数中定义了一个内函数

2.在内函数引用了外函数的临时变量

3.外函数的返回值是内函数的引用

 

image.png

 

 

如何验证函数是否是闭包?

可以通过__closure__属性,如果函数是闭包的话,会返回一个由于cell组成的元组对象,cell对象的 cell_contents 属性就是存储在闭包中的变量

def use_logging(func):
    def inner(*args, **kwargs):
        logging.info("{} is running".format(func.__name__))
        return func(*args, **kwargs)
    return inner

f = use_logging(func)
print(f.__closure__)
print(f.__closure__[0].cell_contents)

-----------
#(<cell at 0x0000015984AE1438: function object at 0x0000015984ADBAF8>,)
#<function func at 0x0000015984ADBAF8>

原文:https://www.yuque.com/zaygee/xrp5b2/xdgt7q

版权声明:本文为weixin_39096520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39096520/article/details/107136833