代码之家  ›  专栏  ›  技术社区  ›  kzh

从Python中的双嵌套函数中访问变量

  •  5
  • kzh  · 技术社区  · 14 年前

    以下代码:

    x = 0
    print "Initialization: ", x
    def f1():
        x = 1
        print "In f1 before f2:", x
        def f2():
            global x
            x = 2
            print "In f2:          ", x
        f2()
        print "In f1 after f2: ", x
    f1()
    print "Final:          ", x
    

    印刷品:

    Initialization:  0
    In f1 before f2: 1
    In f2:           2
    In f1 after f2:  1
    Final:           2
    

    有办法吗 f2 访问 f1 变量?

    3 回复  |  直到 14 年前
        1
  •  6
  •   nikow    14 年前

    你可以访问变量,问题是分配。在python 2中,无法重新绑定 x 一个新的值。见 PEP 227 (嵌套范围)了解更多信息。

    在python 3中,您可以使用 nonlocal 关键字而不是 global . 见 PEP 3104 .

        2
  •  6
  •   interjay    14 年前

    在python 3中,可以将x定义为 nonlocal 在F2中。

    在python 2中,不能直接分配给f1的x。但是,您可以读取它的值并访问它的成员。所以这可能是一个解决办法:

    def f1():
        x = [1]
        def f2():
            x[0] = 2
        f2()
        print x[0]
    f1()
    
        3
  •  0
  •   SilentGhost    14 年前

    去除 global 声明:

    >>> x
    0
    >>> def f1():
        x = 1
        print(x)
        def f2():
            print(x)
        f2()
        print(x)
    
    
    >>> f1()
    1
    1
    1
    

    如果你想 改变 变量 x f1 那么你需要使用 全球的 每个函数中的语句。