zoukankan      html  css  js  c++  java
  • python为什么要使用闭包

    为什么要使用闭包

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

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

    def adder(x):
        def wrapper(y):
            return x + y
        return wrapper
    
    adder5 = adder(5)
    # 输出 15
    adder5(10)
    # 输出 11
    adder5(6)
    

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

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

    >>> adder.__closure__
    >>> adder5.__closure__
    (<cell at 0x103075910: int object at 0x7fd251604518>,)
    >>> adder5.__closure__[0].cell_contents
    5
    

    这解释了为什么局部变量脱离函数之后,还可以在函数之外被访问的原因的,因为它存储在了闭包的 cell_contents中了。

  • 相关阅读:
    vue
    手写Promise
    Promise应用
    Promise
    JS_URL模块
    模板字符串应用
    JS-OOP
    jQuery——过时,但是经典,关注核心点即可。
    MySql补充
    offset系列
  • 原文地址:https://www.cnblogs.com/bonelee/p/11581303.html
Copyright © 2011-2022 走看看