【问题标题】:Python 3: The visibility of global variables across modulesPython 3:跨模块的全局变量的可见性
【发布时间】:2017-04-30 05:50:02
【问题描述】:

之前有人问过类似的问题:

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

建议通过使用“from module import *”来复制全局变量而不是引用。

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    myvar = something_else
    

    但有时不太清楚

    myvar += 1
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2016-10-20
      • 2014-02-18
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多