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

2024-05-26 11:11:25 发布

您现在位置:Python中文网/ 问答频道 /正文

无法将f()的本地x绑定到嵌套g()的全局变量x。为什么

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

Tags: tonameaddedmakeisdefmorenot
2条回答

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

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

f()

这应该管用

要使x成为函数f()中的全局变量:

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

f()
# 1


如注释中所述,x的“全局”状态在这里是毫无意义的,因此最好将x作为参数传递给g(),如下所示:
def f():
    x = 0
    def g(x):
        x += 1
        print(x)
    g(x)

f()
# 1

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

相关问题 更多 >