我在Python中修改不同文件之间的全局变量时遇到了问题。例如:
File1.py:
x = 5File2.py:
from File1 import *
def updateX():
global x
x += 1main.py:
from File2 import *
updateX()
print x #prints 5发布于 2014-05-30 04:54:19
这里有几个重要的事情需要注意。
首先,global不是全球性的。真正全局的东西,比如内置函数,都存储在__builtin__模块中,或者Python3中的builtins中。global意味着模块级。
其次,当你import *时,你得到的新变量与你import *'d的模块中的变量同名,引用了相同的对象。这意味着如果你在一个模块中重新分配变量,另一个模块看不到变化。另一方面,改变可变对象是两个模块都能看到的变化。
这意味着在main.py的第一行之后
from File2 import *File1、File2和__main__ (主脚本在其中运行的模块)都有单独的x变量,引用相同的5对象。File2和__main__也有引用updateX函数的updateX变量。
在第二行之后:
updateX()只有File2的x变量被重新赋值给6 (该函数有定义它的位置的记录,所以它更新File2的x而不是__main__的)。
第三行:
print x打印__main__的x,它仍然是5。
https://stackoverflow.com/questions/23942626
复制相似问题