这是一种奇怪的行为。
尝试这个 :
rep_i=0
print "rep_i is" , rep_i
def test():
global rep_i #without Global this gives error but list , dict , and others don't
if rep_i==0:
print "Testing Integer %s" % rep_i
rep_i=1
return "Done"
rep_lst=[1,2,3]
def test2():
if rep_lst[0]==1:
print "Testing List %s" % rep_lst
return "Done"
if __name__=="__main__":
test()
test2()
为什么list不需要声明global呢?它们自动是全局的吗?
我觉得这很奇怪,我大部分时间都使用列表,我什至根本不使用全局来将它们用作全局......
它不会自动成为全球性的。
然而,两者之间是有区别的rep_i=1
and rep_lst[0]=1
- 前者重新绑定名称rep_i
, so global
需要防止创建同名的本地槽。在后一种情况下,您只是修改一个现有的全局对象,该对象是通过常规名称查找找到的(更改列表条目就像调用列表上的成员函数,它不是名称重新绑定)。
要测试它,请尝试分配rep_lst=[]
in test2
(即将其设置为新列表)。除非你声明rep_lst
global
,效果在外面是不可见的test2
因为创建了同名的本地槽并隐藏了全局槽。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)