0

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

模块一:

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

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

4

1 回答 1

2

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

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

import module_1

module_1.set_g_up()
print module_1.g

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

于 2013-10-22T11:25:55.377 回答