2013-02-08 96 views
0

因此,這裏是發生了什麼事情無法訪問蟒蛇全局變量(很奇怪)

x = [] 

def test(): 
    return x 

def init(): 
    x.append('blah') 

問題的簡化版本:()函數是在一個單獨的文件中運行init和更新全局變量x正確。但是在運行test()函數後,我總是會得到[]的值而不是['blah']。但在這裏它變得奇怪。如果我要運行這個函數(whatever_file.py是存儲這些函數的名字):

x = [] 

def test(): 
    from whatever_file import x 
    return x 

def init(): 
    x.append('blah') 

這工作正常。我會得到['blah']返回。我曾嘗試將全局x放入init和test函數中,但也無濟於事。我不知道發生了什麼事

任何幫助嗎?

+0

作爲另一個方面說明,如果我創建一個類,中日eclass的靜態方法,更新的全球變量被認爲是好的。只需使用獨立函數即可解決問題 –

+0

您的變量僅在MODULE中是全局的,在其外部不可見(這就是爲什麼它在導入時會起作用)。全局變量通常是一個壞主意---你想做什麼?如果您覺得您必須使用「全局」關鍵字。 – Escualo

+0

所以就是這樣。在這兩個函數中使用全局x仍然不會讓我的test()函數識別全局變量。那是怎麼回事? –

回答

4

Python的全局並不是真正的全局。每個模塊都有自己的全局變量,因此您正在存儲的變量在其他模塊的全局變量中不可見。

要存儲在另一個模塊的名字空間的值,只需設置直接在模塊對象的屬性:

import math 

def store(x): 
    math.x = x 
+0

或只是'math.x = x' ... – Eevee