假设我有一个文件 a.py
并且 a
有一个变量 var
。
在文件 b.py
中,我导入了 a.py
并设置 a.var = "hello"
。
然后我在 c.py
中导入了 a.py
并尝试访问 a.var
但我得到 None
.
如何反射(reflect)数据的变化?很明显,两个不同的实例被调用,但我如何更改它?
编辑:
我在这里尝试做的是创建一个由以下内容组成的配置文件:
CONFIG = {
'client_id': 'XX',
'client_secret': 'XX',
'redirect_uri': 'XX'
}
auth_token = ""
auth_url = ""
access_point = ""
现在,假设我在脚本 a.py 中使用 config.py 并设置 config.access_point = "web"
因此,如果我在另一个文件中导入 config.py,我希望更改能够反射(reflect),而不是返回“”。
编辑:
文本文件似乎是一个简单的出路。我还可以使用 ConfigParser 模块。但是如果每次服务器请求都需要读取文件,是不是有点太多了?
最佳答案
首先,第二个 import
语句,即使来自另一个模块,也不会重新执行导入模块的源文件中的代码(如果之前已加载过该代码)。相反,导入已经存在的模块只是让您可以访问该模块的 namespace 。
因此,如果您动态更改模块 a 中的变量,即使是从另一个模块中的代码,其他模块实际上也应该看到更改的变量。
考虑这个测试示例:
testa.py:
print "Importing module a"
var = ""
测试b.py:
import testa
testa.var = "test"
testc.py:
import testa
print testa.var
现在在 python 解释器中(或者主脚本,如果您愿意的话):
>>> import testb
Importing module a
>>> import testc
test
>>>
因此,您会看到导入 b 时对 var
所做的更改实际上在 c 中也可见。
我怀疑您的问题在于您的代码是否实际执行以及按什么顺序执行。
关于python - 如何在Python中设置动态全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119033/