根据我的理解,Python有一个单独的函数名称空间,所以如果我想在函数中使用全局变量,我可能应该使用global。
然而,我能够访问一个全局变量,即使没有全局:
>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
... return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'
为什么会这样?
另请参阅第一次使用后重新分配局部变量时发生的UnboundLocalError,以了解试图分配给全局变量而不使用全局变量时发生的错误。有关如何使用全局变量的一般问题,请参阅在函数中使用全局变量。
其他答案回答了你的问题。关于Python中的名称,要知道的另一件重要的事情是,它们在每个作用域上要么是本地的,要么是全局的。
举个例子:
value = 42
def doit():
print value
value = 0
doit()
print value
您可能会猜测,value = 0语句将赋值给一个局部变量,而不会影响在doit()函数外部声明的同一个变量的值。您可能会更惊讶地发现上面的代码无法运行。函数内部的语句打印值产生一个UnboundLocalError。
原因是Python已经注意到,在函数的其他地方,你分配了name value,而且value也没有声明为全局的。这使它成为一个局部变量。但是当你试图打印它时,本地名称还没有定义。在这种情况下,Python不会像其他一些语言那样返回到将名称作为全局变量来查找。从本质上讲,如果在函数中任何地方定义了同名的局部变量,则无法访问全局变量。
其他答案回答了你的问题。关于Python中的名称,要知道的另一件重要的事情是,它们在每个作用域上要么是本地的,要么是全局的。
举个例子:
value = 42
def doit():
print value
value = 0
doit()
print value
您可能会猜测,value = 0语句将赋值给一个局部变量,而不会影响在doit()函数外部声明的同一个变量的值。您可能会更惊讶地发现上面的代码无法运行。函数内部的语句打印值产生一个UnboundLocalError。
原因是Python已经注意到,在函数的其他地方,你分配了name value,而且value也没有声明为全局的。这使它成为一个局部变量。但是当你试图打印它时,本地名称还没有定义。在这种情况下,Python不会像其他一些语言那样返回到将名称作为全局变量来查找。从本质上讲,如果在函数中任何地方定义了同名的局部变量,则无法访问全局变量。