2016-05-12 73 views
0

我有一個模塊,其中有一個函數接受輸入,處理它,然後返回一個輸出。當我調用這個模塊的函數時,它似乎可以工作,但我無法從主程序中訪問'result'變量。如何訪問函數中的全局變量?

file_a.py:

result = False 
def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py:

import file_a 
for i in range(5): 
    file_a.test(i) 
    print(i, file_a.result) 

詢問result從內test()產生所需的結果(預期當即,它變爲真),但是從主迴路file_a.result總是假的。

回答

0

發生什麼事情是該函數內部的變量result是一個只存在於該函數範圍內的版本。嘗試宣告result作爲全球性的,就像這樣:

result = False 
def test(incoming): 
    global result # declare result as global 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 
1

你應該看看全球v本地命名空間在巨蟒,如。 this random site I found

重點是,你可以在你的函數中定義一個局部變量'results'。改變這個將而不是改變外部(全局)變量的結果。你可以通過告訴函數變量'result'應該是全局變量來改變它。只需將「全局結果」作爲函數的第一行即可。

result = False  
    def test(incoming): 
    global result 
    ... 

這應該解決它。

+0

這是正確的。但取決於你真正想做什麼,你也可以將它保留爲本地,並在file_b中進行賦值(將file_a.test(i)更改爲a = file_a.test(i),然後a返回值通過函數調用,你甚至可以稱之爲'return'而不​​是'a'。 – ViennaMike

0

你正在尋找的答案是在file_a中的方法內使用global result來告訴python你的意思是全局的。但是,這隻會使它適用於您的代碼。我會說你的實現是錯誤的(和危險的)。

在這種情況下,爲什麼在函數調用期間不使用變量賦值?你提供了一個回報,從不使用它。

file_a.py

def test(incoming): 
    if incoming > 3: 
     result = True 
    else: 
     result = False 
    print(result) 
    return result 

file_b.py

import file_a 
for i in range(5): 
    result = file_a.test(i) 
    print(i, result) 

人們似乎沒有理由污染全局變量空間。如果你真的想要這種類型的功能,你應該使用一個類。只要你有兩個模塊使用這個模塊,事情就會變得非常糟糕。你開始使用別人的電話結果。

此外,您的測試正在測試布爾值以返回該測試的相同值。這是多餘的,需要更多的腦力來解析,如果你寫得更簡單:

def test(incoming): 
    return incoming > 3