Python全局范围问题
在Python中修改不同文件之间的全局变量时遇到问题。例如: File1.py:Python全局范围问题,python,variables,methods,module,global,Python,Variables,Methods,Module,Global,在Python中修改不同文件之间的全局变量时遇到问题。例如: File1.py: x = 5 File2.py: from File1 import * def updateX(): global x x += 1 main.py: from File2 import * updateX() print x #prints 5 这里有几件重要的事情需要注意 首先,global不是全局的。真正全局的东西,如内置函数,存储在Python 3中的\uuuuuuuuuuuuu
x = 5
File2.py:
from File1 import *
def updateX():
global x
x += 1
main.py:
from File2 import *
updateX()
print x #prints 5
这里有几件重要的事情需要注意 首先,
global
不是全局的。真正全局的东西,如内置函数,存储在Python 3中的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
模块或内置
中<代码>全局表示模块级别
其次,当您导入*时,您会得到与您导入*的模块中的变量同名的新变量,这些变量引用了相同的对象。这意味着,如果在一个模块中重新分配变量,另一个模块将看不到更改。另一方面,变异可变对象是两个模块都看到的变化
这意味着在main.py的第一行之后:
from File2 import *
File1
、File2
和\uuuuuu main\uuuuuuu
(主脚本运行的模块)都有单独的x
变量,引用相同的5
对象File2
和\uuuuu main\uuuu
也有updateX
变量引用updateX
函数
第二行之后:
updateX()
只有File2
的x
变量被重新分配给6
。(该函数有一个定义位置的记录,因此它会更新File2
的x
,而不是\uuuuuuu主。)
第三行:
print x
打印\uuuu main\uuuu
的x
,它仍然是5。@user2357112:注意到了,读错了,但有点含糊不清。好的。那么,您有什么建议作为替代解决方案(不需要从函数返回值)?我不认为Python有指针或类似的东西,所以…@CoffeeMaker:没有更现实的例子很难说。通常,应避免导入*
和全局状态。如果File2.py
和main.py
都引用了File1.x
,那么问题就不会发生。或者,如果他们通过函数参数而不是全局变量传递x
数据,也可以避免这个问题。