Python 奇怪的命名空间行为
尝试运行以下代码时:Python 奇怪的命名空间行为,python,Python,尝试运行以下代码时: i = 0 def truc(): print (i) if (False): i = 0 truc() 它会产生一个UnboundLocalError,但是 i = 0 def truc(): print (i) #if (False): i = 0 truc() 没有 这是通缉犯的行为吗 有没有办法在不创建新变量的情况下修改变量的值?我可以使用一个元素的dict。它可以工作,但看起来很难看: i = {0 : 0} def truc(
i = 0
def truc():
print (i)
if (False): i = 0
truc()
它会产生一个UnboundLocalError,但是
i = 0
def truc():
print (i)
#if (False): i = 0
truc()
没有
这是通缉犯的行为吗
有没有办法在不创建新变量的情况下修改变量的值?我可以使用一个元素的dict。它可以工作,但看起来很难看:
i = {0 : 0}
def truc():
print (i[0])
if (False): i[0] = 0
truc()
这不是更好的解决办法吗
i = 0
def truc():
global i
print (i)
if (False): i = 0
truc()
要引用函数的外部范围变量,i
应声明为全局变量。只需添加
global i
在方法truc()
的开头,声明i
是全局变量
def truc():
global i
if (False):
i = 0
查看此项以获取更多信息您必须将
全局i
添加到函数中
i = 0
def truc():
global i
if (False):
i = 0
处理此问题的其他方法是:
将i
大写,您可以在不使用global
的情况下访问它,但是i
是不可更改的,这似乎不适合您的情况
将
i
作为参数。这使得代码不那么凌乱,以后更容易调试。糟糕但快速的方法:将global i
添加到函数中。这是一个很好的方法,需要更多的字符:不要在函数中更改全局变量,而是将其作为参数传入并返回新值,使用i=truc(i)
调用它。从长远来看,更容易控制。返回新值并将变量设置为返回值,也可以使用类并将其作为属性,只需避免使用全局变量。