我正在尝试更改变量影响另一个模块。其他模块似乎没有注意到这种变化。
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 :(得分:2)
import b
不会将myVar
或changeMyVar
导入a.py的范围,它只会定义引用该模块的名称b
。
因此,您必须使用名称b
访问a.py中的myVar
和changeMyVar()
:
import b
b.changeMyVar()
print(b.myVar["key"])