Python 3:跨模块的全局变量的可见性
Posted
技术标签:
【中文标题】Python 3:跨模块的全局变量的可见性【英文标题】:Python 3: The visibility of global variables across modules 【发布时间】:2017-04-30 05:50:02 【问题描述】:之前有人问过类似的问题:
here、here 和 here,我知道这些。
假设您有 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
建议通过使用“from module import *”来复制全局变量而不是引用。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:from module import *
将module
中的对象绑定到当前模块中的命名变量。这不是复制,而是添加对同一对象的引用。两个模块将看到相同的对象,直到其中一个重新绑定对象。修改可变对象不会重新绑定变量,因此可以执行附加到列表等操作。但是重新分配变量确实会重新绑定它。通常重新绑定是直截了当的:
myvar = something_else
但有时不太清楚
myvar += 1
对于 int
或 str
等不可变对象,这会重新绑定变量,现在两个模块具有不同的值。
如果您想确保始终引用同一个对象,请保留命名空间引用。
【讨论】:
以上是关于Python 3:跨模块的全局变量的可见性的主要内容,如果未能解决你的问题,请参考以下文章