2017-08-06 73 views
-1

我试图让更改的变量影响另一个模块。其他模块似乎没有注意到这一变化。另一个模块中的更改变量不会更新

a.py:

import b 

b.changeMyVar() 
print(b.myVar["key"]) 

b.py:

myVar = {"key": "foo"} 

def changeMyVar(): 
    myVar["key"] = "value" 

我期待(上运行a.py)什么:

value 

我能得到什么:

foo 

我该如何做这项工作?为什么它不起作用?如果myVar是一个由changeMyVar(这两种情况都发生在我的程序中)突变的字典,情况会不同吗?

请注意我没有写from b import *,这是我理解的邪恶。

编辑1:正如评论者指出的,如果myVar是不可变的对象,没有global myVar,这将无法正常工作。我改变了这个例子以更好地反映我的意思。

编辑2:我忘了添加b.但是,我的问题没有改变。变量已定义,但运行时更改从其他模块不可见。我再次编辑了代码来澄清我的问题。

+0

这不是在同一模块级连工作更不用说跨模块。 –

+0

函数定义一个范围... –

+2

用你的新代码,我希望你得到'NameError:name'changeMyVar'未定义' –

回答

2

import b不会导入myVarchangeMyVar到a.py的范围,它只定义了引用该模块的名称b

所以,你必须使用的名称b访问myVarchangeMyVar()在a.py:

import b 

b.changeMyVar() 
print(b.myVar["key"]) 
+0

种类。整个'b'模块被导入,但添加到'a'命名空间的唯一名称是'b'。 –

相关问题