2012-06-03 84 views
6

在使用全局變量時,我在Python中遇到了一個奇怪的問題。在Python中瞭解全局變量

我有兩個模塊(文件):mod1.pymod2.py

mod1試圖修改在mod2定義的全局變量var。但mod2中的varmod中的var似乎是兩個不同的事情。因此,結果表明這種修改不起作用。

下面是代碼:

#code for mod2.py 
global var 
var = 1 
def fun_of_mod2(): 
    print var 

#code for mod1.py 
from mod2 import var,fun_of_mod2  
global var #commenting out this line yields the same result 
var = 2 #I want to modify the value of var defined in mod2 
fun_of_mod2() #but it prints: 1 instead of 2. Modification failed :-(

爲什麼發生這種情況的任何暗示?如何修改mod2中定義的val的值mod1

感謝

回答

11

當您導入varmod1

from mod2 import var,fun_of_mod2 

你給它MOD1的命名空間的名稱var這是因爲如果你這樣做:

import mod2 
var = mod2.var 
fun_of_mod2 = mod2.fun_of_mod2 
del mod2 

換句話說,現在有兩個名字的價值,mod1.varmod2.var。他們一開始是一樣的,但是當你重新分配mod1.var時,mod2.var仍然指向相同的東西。

你想要做的僅僅是:

import mod2 

然後訪問和變量指定爲mod2.var

需要注意的是,Python中的全局變量並不是真正的全局變量。它們僅對其聲明的模塊是全局的。要訪問另一個模塊中的全局變量,請使用module.variable語法。 global語句可以在函數中使用,以允許將模塊全局名稱分配給(沒有它,分配給變量使其成爲該函數中的局部變量)。它沒有其他作用。

+0

+1,但要完全回答這個問題,你應該提及'global'的作用。 OP的主要問題似乎是誤解了它的用處。 – lvc

+0

好點,增加了一些關於這一點。 – kindall

+0

謝謝,我想我明白了。 – xiaohan2012