2013-08-19 93 views
0

我有下面的代碼,我更改全局的代碼。我讀過的大部分內容都表示遠離全局變量......在下面的示例中,我想使用「make_lists」,然後將它打印在「print_list」中,然後清除列表。我使用全局變量來做到這一點,關於如何避免全局變量的建議?函數之間的傳遞列表

我知道我可以在一個函數中添加這一切,但這是所有功能的一部分,這是我遇到的唯一問題。預先感謝。

x_lst = [] 

def make_lists(): 
    global x_lst 

    x_lst.append("Hello") 

def print_list(): 
    global x_lst 

    for i in x_lst: 
     print(i) 

    x_lst = [] 

def main(): 
    make_lists() 
    print_list() 

if __name__ =="__main__": 
    main() 

回答

2

要避免使用全局的,你必須使用return關鍵字在函數聲明中返回一個值,這將是在我們的情況下,你新創建的列表。您還必須在函數聲明中使用arguments,這是函數中值的佔位符。所以你不需要全局值的原因是你將列表從一個函數傳遞到另一個函數。

def make_lists(): 
    return ['Hello'] # Your are creating the list with a single value, 
         # and return it 

def print_list(ls): 
    for i in ls:  # You are iterating thru the list, 
     print(i)  # which is the input of this function 

def main(): 
    print_list(make_lists()) # In your main function you call the make_list() 
           # which will return the newly created list, and 
           # pass it to print_list, which will iterate thru 
           # the list and prints your values out 

if __name__ =="__main__": 
    main() 
0

我已經對代碼做了一些最小的修改,說明了如何傳遞列表而不是使用全局列表。希望這有助於澄清。

​​
1
def make_list(): 
    return ['Hello'] 

def print_list(l): 
    for x in l: 
     print(x) 

def main(): 
    print_list(make_list()) 

通數據與參數的函數,並傳遞出的數據與返回值。

1

這裏是我的簡單建議,爲什麼不給功能輸入。傳遞一個列表來打印出來而不是使用全局變量是一個簡單的選擇。如果您正在尋找一種方法來保持特定範圍的狀態,可以嘗試將這些函數放在一個類中(換句話說就是使用OOP)

全局變量的問題是當您聲明'x_lst'爲全局,它會向函數外部打開「x_lst」,這可能不是或者是您的預期目標。