我遇到了一些关于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
!
什么?这是同一个对象!或者,至少,我希望它是。
答案 0 :(得分:2)
每个模块都有自己的全局名称范围。通过从另一个模块通过*
导入所有内容,您可以将另一个模块的全局变量的副本(对值的其他引用)创建到您自己的模块中。
使用限定名称以防止这种情况发生:
import module_1
module_1.set_g_up()
print module_1.g
如果您实际上是指变量g
,则无法通过调用module_1.g
来访问同一变量。所有你能做的就是两个变量都包含相同的值(只对列表,对象和其他变量有意义)。