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

无法将本地var绑定到嵌套的全局var

  •  1
  • sof  · 技术社区  · 7 年前

    x f() 到全局var 嵌套的 g() . 为什么?

    def f():
     x=0
     def g():
      global x
      x+=1
      print(x)
     g()
     g() # added to make seemingly more practical 
    

    -

    >>> f()
    ...
    NameError: global name 'x' is not defined
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Austin    7 年前

    x 函数中的全局变量 f() :

    def f():
        global x
        x = 0
        def g():
            global x
            x += 1
            print(x)
        g()
    
    f()
    # 1
    


    正如评论中提到的,全球的 在这里毫无意义,所以你最好通过 g() 像这样:
    def f():
        x = 0
        def g(x):
            x += 1
            print(x)
        g(x)
    
    f()
    # 1
    

    这不仅使您的代码更简洁,而且消除了“全局”的开销。

        2
  •  0
  •   Chandella07    7 年前

    为了避免使用全局变量,只需通过函数传递一个参数 g :

    def f():
        x=0
        def g(y):
            y+=1
            print(y)
        g(x)
    
    f()