Python:在其中的模块和类之间共享全局变量

我知道有可能在Python模块中共享一个全局变量。但是,我想知道这是可能的程度,为什么。例如,

global_mod.py

x = None

mid_access_mod.py

from global_mod import *

class delta:
    def __init__(self):
        print x

bot_modif_mod.py

import mid_access_mod
import global_mod

class mew:
    def __init__(self):
        global_mod.x = 5

def main():
    m = mew()
    d = mid_access_mod.delta()

这将打印无,即使所有模块共享全局变量x。为什么会这样?看起来x在mid_access_mod.py之前被评估,之后它被mew()在bot_modif_mod.py中赋值。

这是因为你使用了不可变的值(int和None),导入变量就像通过值传递东西,而不是通过引用传递东西。

如果你使global_mod.x一个列表,并操纵它的第一个元素,它将如你所期望的工作。

当从global_mod import x中执行时,您将在模块中创建一个名称x,其值与global_mod中的x相同。对于像函数和类这样的东西,它的工作原理是你所期望的,因为人们(一般来说)不会重新分配这些名字。

正如Alex指出的,如果你使用import global_mod,然后使用global_mod.x,你会避免这个问题。你在模块中定义的名称将是global_mod,它总是引用你想要的模块,然后使用属性访问获得x将获得x的最新值。

http://stackoverflow.com/questions/3338283/python-sharing-global-variables-between-modules-and-classes-therein

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Python:在其中的模块和类之间共享全局变量