请参阅以下代码:
def good():
foo[0] = 9 # why this foo isn't local variable who hides the global one
def bad():
foo = [9, 2, 3] # foo is local, who hides the global one
for func in [good, bad]:
foo = [1,2,3]
print('Before "{}": {}'.format(func.__name__, foo))
func()
print('After "{}": {}'.format(func.__name__, foo))
结果如下:
^{pr2}$
在python中,变量将首先查找其内部范围,然后再查找外部范围。例如:
如果要修改全局范围的变量,则需要使用
^{pr2}$global
关键字因为没有设置foo,所以在foo中得到了一些东西(确切地说是foo[0])。在
在
bad
中创建一个新变量foo
。在good
中,您可以执行类似于foo.set(0, 9)
(将项目0设置为值9)。它是使用变量,而不是定义新名称。在为了简单起见,python首先查看局部变量,然后再查看全局变量。(用于读取或创建变量)
所以,好的话,你需要一个foo变量:没有局部foo变量和一个全局foo变量=>;你取全局变量并修改它。在
在bad中,您创建了一个新的(局部)变量,因此全局变量不会被修改。在
可以使用global关键字指定变量为全局变量:
相关问题 更多 >
编程相关推荐