全局变量和来自其他模块的全局声明

时间:2013-10-22 11:19:40

标签: python global python-module

我遇到了一些关于Python如何处理全局(模块)变量和global关键字的奇怪行为。

第1单元:

g = None

def set_g_up():
    global g
    g = "foo"

set_g_up()
print g

第2单元:

from module_1 import *

set_g_up()
print g

模块1按预期打印"foo" 第2单元打印None

什么?这是同一个对象!或者,至少,我希望它是。

1 个答案:

答案 0 :(得分:2)

每个模块都有自己的全局名称范围。通过从另一个模块通过*导入所有内容,您可以将另一个模块的全局变量的副本(对值的其他引用)创建到您自己的模块中。

使用限定名称以防止这种情况发生:

import module_1

module_1.set_g_up()
print module_1.g

如果您实际上是指变量g,则无法通过调用module_1.g来访问同一变量。所有你能做的就是两个变量都包含相同的值(只对列表,对象和其他变量有意义)。