写入模块范围的变量

时间:2014-07-31 11:58:47

标签: python

假设我有这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分配不同的值。

2 个答案:

答案 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)。   只需在应用程序的所有模块中导入配置模块;该   然后,模块可用作全局名称。因为只有   每个模块的一个实例,对模块对象进行的任何更改   到处反映

小心;一旦你创建了这个配置模块,因为它是必要的,它很容易被带走并开始添加其他变量,因为它就在那里。大部分时间都有更好的方式...