Python 3:跨模块的全局变量的可见性

时间:2016-12-14 19:13:45

标签: python python-3.x import module global-variables

以前曾提出过类似的问题:

hereherehere,我知道这些。

假设您有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

建议使用"来自模块导入*"全局变量被复制而不是被引用。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

from module import *module中的对象绑定到当前模块中的命名变量。这不是副本,而是添加对同一对象的引用。两个模块将看到相同的对象,直到其中一个重新绑定对象。修改可变对象并不重新绑定变量,因此诸如附加到列表之类的操作是可以的。但重新分配变量确实会重新分配它。通常重新绑定是直截了当的:

myvar = something_else

但有时它不那么清楚

myvar += 1

对于intstr等不可变对象,重新绑定变量,现在两个模块具有不同的值。

如果要确保始终引用同一对象,请保留命名空间引用。