假设我有这3个(微小的)python文件 -
a.py
myvar = 'a'
b.py
import a
import c
myvar = 'b'
c.pr()
c.py
from a import myvar
def pr():
print myvar
现在,如果我执行b.py
,我会得到输出
a
但我真的希望输出为
b
请告诉我如何重组/修改程序,以便为模块范围的 myvar
分配不同的值。
答案 0 :(得分:6)
在 b.py 中,您要设置 b.py 的myvar。您想要访问myvar的值。所以 b.py 可能如下所示:
import a
import c
a.myvar = 'b' # belongs to a
myvar = 'something different' # belongs to b
c.pr()
您需要更新 c.py ,以便它使用 a.py 的myvar,而不是它自己的本地副本。所以 c.py :
import a
def pr():
print a.myvar
<强>为什么吗
在您的原始 c.py 中,当您致电from a import myvar
时,这相当于:
import a
myvar = a.myvar
这会在导入时在 c.py 中生成myvar
的本地版本。如果这令人困惑,我发现这个article关于python变量如何工作非常有用。
答案 1 :(得分:6)
我是通过第四个模块d.py
来完成的。
此模块由'a','b'和&amp;进口。 'C'。
与docs:
一样在单个模块中跨模块共享信息的规范方法 程序是创建一个特殊的模块(通常称为config或cfg)。 只需在应用程序的所有模块中导入配置模块;该 然后,模块可用作全局名称。因为只有 每个模块的一个实例,对模块对象进行的任何更改 到处反映
小心;一旦你创建了这个配置模块,因为它是必要的,它很容易被带走并开始添加其他变量,因为它就在那里。大部分时间都有更好的方式...