Pythonの if __name__ == "__main__" とは

Pythonのサンプルコードを見ていると、if __name__ == "__main__": という記述をよく目にします。このif文の条件式が何を意味しているかについて説明します。

if __name__ == "main": とは

if __name__ == __main__: が記述された Python ファイル(ここでは test.py とします)自体がスクリプトとして実行された際には、ifブロックが実行されます。しかし、test.py が他の Python ファイルからモジュールとしてインポートされた場合にはifブロックは実行されません。

次のサンプルプログラムで確認してみましょう。

# test.py

print "Hi"

if __name__ == __"main"__:
    print "Bye"

実行結果

Hi
Bye

test.pyを実行すると、__name__ の値は自動的に "__main__" に置き換えられ、 if __name__ == “__main__”: 以下のブロックが実行されます。

次に、test.py を import した test2.py を実行すると、次のようになります。

# test2.py
import test

実行結果

Hi

このように、他のプログラム(test2.py)からtest.pyをインポートした場合、__name__ はモジュール名である "test" に置き換えられ、if __name__ == "__main__": のブロックは実行されません。

このことを利用して、モジュールを作成する際にはモジュールの使い方を注釈代わりに if __name__ == "__main__": 以下に記述することがあります。if __name__ == "__main__": 以下のブロックに関数の使い方などを記述しておくことで、各モジュールの使い方などがわかり、非常に便利です。


購読

平日・毎朝更新中