最初に結論
-
if __name__ == "__main__":
は、主にPythonの自作モジュールを使う際に用いられる記述です。 - これは「モジュール本体」に記載すべきもので、モジュールの「呼び出し側」には書きません。
- これを書いておくと、モジュール自体を単体で実行した際にのみそのコードブロックが実行されます。呼び出し側では実行されません。
- この挙動により、モジュール単体での実行時にのみ関数を実行させる、といったことが可能となり、主にテスト時に便利です。
具体的な挙動
mymodule.py
def say_hello():
print("Hello, world!")
if __name__ == "__main__":
say_hello()
このように書いておくと、
-
mymodule.py
を単体で実行した際には、say_hello()
が実行されます。 - 呼び出し側では、明示的に
say_hello()
と書かない限り実行されません。 - 仮に
if __name__ == "__main__":
がない場合、呼び出し側ではimport文を読み込んだ段階で自動的にsay_hello()
が実行されてしまいます。
name・main とは何か?
-
__name__
は、Pythonファイルを実行した際に自動で割り当てられる変数です。 - 直接実行の際には
__main__
が自動で格納されます。 - 呼び出して実行した際には、呼び出し名が格納されます。
- 例:
import mymodule
のように別のスクリプトからインポートされた場合、__name__
は"mymodule"
になります。 - そのため、
if __name__ == "__main__":
ブロック内のコードは実行されない、ということになります。
- 例: