【python】if __name__ == ‘__main__’って何なの??

【python】if __name__ == ‘__main__’って何なの??

 時々見かけるif __name__ == ‘__main__’って何のためにあるの?って説明をしていきたいと思います。先に結論を記載すると、自分自身が直接実行されたときにif __name__ == ‘__main__’以下のコードが実行されます。関数で呼び出したときに実行されなくなります。

フォルダ構成

test(フォルダ)
 |main.py
 |-def(フォルダ)
  |-def_test.py

サンプルプログラム

main.py

from os import path
import sys
m_path = path.join(path.dirname(__file__),"def")
sys.path.append(m_path)


import def_test




x="main.pyから引数を渡して関数を実行"
s=def_test.print_test(x)
print(s)

def_test.py

def print_test(x2):
    print(x2)
    y="戻り値"
    return y

    
if __name__ == '__main__':
    x="テスト用の引数です"
    print_test(x)

実行結果&説明

【def_test.py】
<説明>
 はじめにdef_test.pyのみを実行してみます。if __name__ == ‘__main__’以下は自分自身が「直接実行」されたときに実行されますので、関数print_testにxをx2としてデータを渡します。その後、関数print_testでpirntされて文字列が表示されます。帰り値のreturnはここでは無視してください。無くても動きます。

<実行結果>

【main.py】
<説明>
 1~7行目は自作関数を読み込みです。以下の説明を参考ください。
(参考)自作モジュールをimportするとModuleNotFoundErrorが出てしまう
 13行目でdef_test.pyの中にあるprint_test関数を実行します。ここで関数に渡すデータはmainで定義したxとなりますので実行結果には「main.pyから引数を渡して関数を実行」となります。関数実行後の引数がsで帰ってきますので14行目で「戻り値」がプリントされます。

<実行結果>

if __name__ == ‘__main__’がない場合

 if __name__ == ‘__main__’がない場合にmin.pyを実行した場合は下記の結果となります。main.pyにimportされたタイミングでdef_test.pyの8行目の表記から関数が実行されてしまっています。このような状況を回避するためにif __name__ == ‘__main__’は便利です。

<コード>def_test.py(if __name__ == ‘__main__’なし)

def print_test(x2):
    print(x2)
    y="戻り値"
    return y

    
x="テスト用の引数です"
print_test(x)

<main.pyの実行結果>