2013-10-22 47 views
0

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

模块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

[Python:在其中的模块和类之间共享全局变量]的可能重复(http://stackoverflow.com/questions/3338283/python-sharing-global-variables-between-modules-and-classes-inherein) – aIKid

回答

2

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

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

import module_1 

module_1.set_g_up() 
print module_1.g 

有没有办法通过调用它g访问相同的变量,如果你实际上指的是可变module_1.g。你所能做的只是这两个变量都包含相同的值(只对列表,对象和其他可变项有意义)。

+0

不变性的另一个原因。我现在了解瑞克希基。 – Profpatsch