zoukankan      html  css  js  c++  java
  • 闭包

    局部变量在函数执行完成后就被销毁了。那么如果在line函数中使用了line_conf的变量,当line_conf函数执行完成后,在全局环境中的line函数还能使用line_conf中的变量吗?

    def line_conf():
      b = 15
      def line(x):
        return 2*x + b
      return line
    
    b = 5
    my_line = line_conf()
    print(my_line(5))

    在上面的代码中,line函数使用了父函数中声明的变量b, 此时变量b为line的环境变量

    当line函数作为line_conf函数的返回值时( return line), 变量b的取值已经和line函数绑定在一起,此时父函数line_conf已经和变量b没关系了,变量b即使再变化,也不会影响到line函数的计算结果

    这种情况下,我们就说line函数和它的环境变量b构成了一个闭包,闭包时一个独立的运行环境,不受外部环境的影响。 上面的代码输出结果时25, 而不是15

    查看闭包中自由变量b的值

    >>> myline.__closure__[0].cell_contents
    15

    查看myline对象实例中的自由变量,局部变量

    >>> myline.__code__.co_freevars
    ('b',)
    >>> myline.__code__.co_varnames
    ('x',)
  • 相关阅读:
    勿忘初心
    欧拉函数与数论的结合UVA11426
    法雷级数
    欧拉函数及其应用
    poyla计数问题
    组合计数问题中容斥原理的应用
    数学问题当中的一些基本计数问题
    HDU4642博弈好题
    KMP算法在字符串中的应用
    UVA11722概率问题之线性规划
  • 原文地址:https://www.cnblogs.com/regit/p/12697790.html
Copyright © 2011-2022 走看看