【if __name__ == "__main__": の動作】
if __name__ == "__main__": の中 → そのスクリプトを直実行のときだけ実行される。
if __name__ == "__main__": の外 → そのスクリプトを、他のスクリプトからインポートしたときも実行される。
例
スクリプト内容
test1.py
def hello():
print("こんにちは")
def bye():
print("さよなら")
hello()
if __name__ == "__main__":
bye()
test2.py
import test1
test3.py
import test1
test1.bye()
実行結果
(py_env) PS C:\tmp\py_script> py .\test1.py
こんにちは
さよなら
(py_env) PS C:\tmp\py_script> py .\test2.py
こんにちは
(py_env) PS C:\tmp\py_script> py .\test3.py
こんにちは
さよなら
【__name__ とは?】
Python がスクリプトを読み込むときに、自動的に定義される特別な変数 。
- (A) スクリプトを 直接実行 したとき →
__name__は"__main__"にセットされる。 - (B) スクリプトを import したとき →
__name__は モジュール名(ファイル名) になる。
つまり、(A)の場合のみ"if"の結果がTrueになり、 if __name__ == "__main__"内が実行される。
【なぜこの仕組みがあるのか?】
この構文は、
- 「スクリプトとしても使えるし、モジュールとしても使える」 ようにするための仕組み
Python では、ファイルを 「モジュール」 として他のファイルから import できるため、
if __name__ == "__main__": がないと、import しただけで意図せず実行されてしまう。