Possible Duplicate:
Why is not the keyword global not required in this case?
我想知道为什么我可以在不使用global
关键字的情况下更改全局字典?为什么其他类型是强制性的?这背后有什么逻辑吗?
例如,代码:
#!/usr/bin/env python3
stringvar = "mod"
dictvar = {'key1': 1,
'key2': 2}
def foo():
dictvar['key1'] += 1
def bar():
stringvar = "bar"
print(stringvar)
print(dictvar)
foo()
print(dictvar)
print(stringvar)
bar()
print(stringvar)
给出以下结果:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2} # Dictionary value has been changed
mod
bar
mod
我希望:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 1} # I didn't use global, so dictionary remains the same
mod
bar
mod
原因是这条线
是不明确的,它可能是指全局变量,或它可能是在创建名为
stringvar
的新局部变量。在本例中,Python默认假定它是一个局部变量,除非已经使用了global
关键字。然而,这条线
完全不含糊。它只能引用全局变量
dictvar
,因为dictvar
必须已经存在,语句才能不引发错误。这并不特定于词典-列表也是如此:
或其他种类的物体:
无论什么时候只要一个mutating operation is used rather than a rebinding one都是真的。
您可以不使用
global
关键字修改任何可变对象。这在Python中是可能的,因为
global
用于将新对象重新分配给已在全局范围中使用的变量名或定义新的全局变量。但是对于可变对象,您不需要分配任何东西,只需在适当的位置修改它们,因此Python只需从全局范围加载它们并修改它们。
正如docs所说:
dis.dis
:相关问题 更多 >
编程相关推荐