【python】if __name__ == ‘__main__’って何なの??
- 2021.09.26
- python
時々見かける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の実行結果>
-
前の記事
【python】フォルダを空にしたい 2021.03.06
-
次の記事
【python】exeにすると動かない 2021.11.20