2017-10-21 85 views
0

對於這件事,我一直在抨擊我的頭腦,我知道它可能最終會變成一些愚蠢的東西,但我的進口遊戲是不存在的。如何通過三個文件將列表從一個函數傳遞給Python3中的另一個函數?

基本上,我在同一個目錄下有四個文件:fs.py,z.py,match.py,y.py

來自fs.py的功能和來自z.py的功能饋送到match.py。從那裏,match.py的結果輸入到y.py(這是我遇到問題的地方)。

當我將match.py的列表填入y.py時,列表爲空且沒有任何內容。

每個文件都有一些代碼,但邏輯的一般流程如下。我認爲它與我在最後一個文件中輸入的方式有關:y.py

我在運行match.py時可以得到我想要的結果,因此我知道fs.pyz.py的結果正確輸入。我打印出的列表將從match.py進入y.py,看看我是否有任何東西,它不是一個空列表,所以我不確定它爲什麼被作爲空列表傳入y.py中的函數。我是否還想在y.py中輸入fsz

fs.py:

def get_fs(): 
    y_params = [1, 2, 4] 
    return y_params 
if __name__ == "__main__": 
    get_fs() 

z.py:

def get_z(): 
    y_params = [3, 5, 4] 
    return y_params 
if __name__ == "__main__": 
    get_z() 

match.py​​

from fs import get_fs 
from z import get_z 

def create_list(fs=[], z=[]): 
    match_list = [] 
    match_list = fs + z 
    return match_list 
if __name__ == "__main__": 
    fs = get_fs() 
    z = get_z() 
    create_list(fs, z) 

y.py

from match import create_list 

def create_new_list(match_list=[]): 
    print(match_list) 

if __name__ == "__main__": 
    match_list = create_list() 
    create_match_list(match_list) 

如果有人有任何想法,我會很感激。我一直試圖弄清楚最近2個小時的情況,而且我對python還很陌生。 T_T我也可以添加原始代碼。

+0

如果使用這些文件作爲模塊,則不需要if __name__ ==「__main __」'。 –

回答

0

我想你錯誤地解釋了你在代碼中使用的if __name__ == '__main__'的概念。這if條件評估爲True只有當您執行python file.py,如果您是導入file.py到某些其他模塊,它不會被執行。

你的情況 match.py

現擁有列表初始化放在if __name__ == "__main__"內,這將被評估,只有當你運行python match.py如果導入match一些其他的文件,該if __name__ == "__main__"條件將評估爲假,因此您的名單將是空的。

+0

因此,根據我的理解,當運行./match.py​​時,我可以看到來自fs和z的列表,因爲列表未在其自己的文件中初始化,並且正在執行match.py​​。然而,如果__name__ =='__main__'成爲一個問題,當我嘗試初始化列表以傳遞給另一個函數時,因爲match.py​​不再被執行?看起來我只需要首先從match.py​​中初始化y.py中的列表,然後只是將函數調用到最後?請讓我知道,如果我完全脫離我的思路...... –

+0

你似乎有點偏離這裏。關鍵是如果你運行'python match.py​​','if __name__ =='__main __「'塊被執行,這會初始化列表,但是當你導入匹配時,'if __name__ =='__main __''塊不執行,因此'create_list(fs = [],z = [])'獲得空列表作爲默認參數。 – ZdaR

相關問題