我有两个全局变量,一个是int,另一个是列表。 我可以在其中一个函数定义中修改列表,但不能修改int(不使用全局语句)。
i = 2000
lst = range(0,3)
def AddM():
i=i+1
lst.append(10)
这背后的原因是什么?
答案 0 :(得分:0)
答案比你想象的要简单得多。
您需要在此处学习如何使用全局声明。 请参阅文档并仔细阅读:
globals()是一个包含所有全局变量的字典: https://docs.python.org/2/library/functions.html#globals
使用"全球" Python中的关键字: https://docs.python.org/2/reference/simple_stmts.html#the-global-statement
我通过谷歌发现了一个随机的例子来说明如何修复你的程序: stereochro.me/ideas/global-in-python
玩得开心。
答案 1 :(得分:0)
正如python doc明确提到的那样
This is because when you make an assignment to a variable in a scope, that variable becomes local to that scope and shadows any similarly named variable in the outer scope.
将该变量的范围定义为全局。
>>> i = 2000
>>> def AddM():
... global i
... x += 1
>>> p = AddM()
>>>print p
2001
全局只会影响范围和名称解析。在这里使用列表,您只需修改已存在的列表并附加新元素,这就是您不需要将其定义为全局的原因。