python - 如何在Python中设置动态全局变量?

标签 python

假设我有一个文件 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/

相关文章:

python - 如何将 numpy.array2string 形成的字符串转换回数组?

Python:从嵌套迭代器组成列表

python - 使用 GitLab CI 和 Python 'onbuild' 镜像,requirements.txt 中的包似乎没有安装

python - DatabaseError : Execution failed on sql, 无法将元组连接到字节

Python:在文件中搜索特定字符串并输出字符串总数

python - igraph 不能使用 GLPK

python - 如何使用 sqlalchemy 有效地管理频繁的模式更改?

python - 使用 apply、transform、agg - Python Pandas 时如何引用 groupby 索引?

python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame

python - odoo-bin : error: option --addons-path: no such directory: '../mymodules'