2017-10-21 9 views
0

私はこれについていくつかの時間頭を叩いてきたし、それは愚かなものになるかもしれないが、私の輸入ゲームは存在しないことを知っている。Python3のある関数から別の関数に3つのファイルを渡してリストを渡すにはどうすればいいですか?

基本的に同じディレクトリに4つのファイルがあります。fs.py,z.pymatch.pyy.pyです。

fs.pyの機能とz.pyの機能は、match.pyにフィードします。そこから、match.pyの結果がy.pyに送られます(これが問題の原因です)。

match.pyからy.pyにリストをフィードすると、リストは空になり、何もありません。

各ファイルには少しのコードがありますが、一般的なロジックの流れは以下のとおりです。私はそれが私の最後のファイルでインポートしている方法と関係していると思っています:y.py

match.pyを実行すると、私はfs.pyz.pyの結果が適切に入力されていることを知っています。私はy.pyからmatch.pyに行くリストを印刷しました。何かが得られたかどうかを確認するために空のリストではないので、なぜそれが空のリストとしてy.pyに渡されているのかわかりません。 y.pyfszもインポートすると思いますか?

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の条件はになります。python file.pyを実行した場合はfile.pyを他のモジュールにインポートすると実行されません。あなたのケースでは今

match.pyあなたはpython match.pyを実行するときに、いくつかの他のファイルへのmatchをインポートする場合、if __name__ == "__main__"条件がfalseに評価されますので、あなたのリストが空になるだけで評価されるだろうif __name__ == "__main__"内部に配置されたリストの初期化子を、持っています。

+0

だから私が理解しているところでは、./match.py​​を実行すると、リストが自分のファイルで初期化されていないため、そしてmatch.py​​が実行されているので、fsとzからリストを見ることができます。しかし、もし__name__ == '__main__'が問題になるのは、match.py​​がもう実行されないので、別の関数に渡すリストを初期化しようとするとですか?最初はy.pyのリストをmatch.py​​から初期化し、最後に関数を呼び出す必要がありますか?私が思考のラインから完全に離れているかどうか私に教えてください.... –

+0

あなたはここから少し離れているようです。ポイントはあなたが 'python match.py​​'を実行すると' if __name__ == "__main __" 'ブロックが実行され、リストを初期化しますが、' import match'を実行すると 'if __name__ ==" __main __ "'ブロック'create_list(fs = []、z = [])'はデフォルトの引数として空リストを取得します。 – ZdaR

関連する問題