在 python 中访问函数中的全局变量



我有两段代码:

def g(y):
  print(x)
x = 5 
g(x)

def h(y):
  x = x + 1
x = 5
h(x)

第一段代码可以完美地打印"5",而第二段代码返回:

UnboundLocalError: local variable 'x' referenced before assignment

这到底是什么意思?是想说在评估行x=5之前,它试图评估行x = x + 1吗?如果是这样,为什么第一段代码没有生成任何错误?同样,在为x分配值之前,它必须评估行print(x)

我想我可能误解了函数的调用方式。但我不知道我错了什么。

# first block: read of global variable. 
def g(y):
  print(x)
x = 5 
g(x)
# second block: create new variable `x` (not global) and trying to assign new value to it based on on this new var that is not yet initialized.
def h(y):
  x = x + 1
x = 5
h(x)

如果要使用全局,则需要使用关键字显式指定global

def h(y):
  global x
  x = x + 1
x = 5
h(x)

正如 Aiven 所说,或者你可以像这样修改代码:

def h(y):
   x = 9
   x = x + 1
   print(x) #local x
x = 5
h(x)
print(x) #global x

相关内容

  • 没有找到相关文章

最新更新