以前曾提出过类似的问题:
假设您有2个模块,其中一个模块具有您想要在另一个模块中读取的全局变量。有没有办法让这些模块可以跨模块访问,而不必每次都将它们称为module.variable?
示例:
modulea.py:
import moduleb
from moduleb import *
print("A String: " + astring)
print("Module B: " + moduleb.astring)
afunction()
print("A String: " + astring)
print("Module B: " + moduleb.astring)
moduleb.py:
astring = "dlroW olleH"
def afunction():
global astring
astring = "Hello World"
输出
A String: dlroW olleH
Module B: dlroW olleH
A String: dlroW olleH
Module B: Hello World
建议使用"来自模块导入*"全局变量被复制而不是被引用。
提前感谢您的帮助。
答案 0 :(得分:1)
from module import *
将module
中的对象绑定到当前模块中的命名变量。这不是副本,而是添加对同一对象的引用。两个模块将看到相同的对象,直到其中一个重新绑定对象。修改可变对象并不重新绑定变量,因此诸如附加到列表之类的操作是可以的。但重新分配变量确实会重新分配它。通常重新绑定是直截了当的:
myvar = something_else
但有时它不那么清楚
myvar += 1
对于int
或str
等不可变对象,重新绑定变量,现在两个模块具有不同的值。
如果要确保始终引用同一对象,请保留命名空间引用。