请看下面的代码:
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))
结果如下:
# python3 foo.py
Before "good": [1, 2, 3]
After "good": [9, 2, 3]
Before "bad" : [1, 2, 3]
After "bad" : [1, 2, 3]
请您参考如下方法:
因为您没有设置 foo,所以您在 foo 中得到了一些东西(准确地说是 foo[0])。
在 bad 中,您创建了一个新变量 foo。在 good 中,您可以执行类似 foo.set(0, 9) 的操作(将项目 0 设置为值 9)。这是使用一个变量,而不是定义一个新名称。
