Pythonのサンプルコードを見ていると、if __name__ == "__main__": という記述をよく目にします。このif文の条件式が何を意味しているかについて説明します。
if __name__ == "main": とは
if __name__ == __main__: が記述された Python ファイル(ここでは test.py とします)自体がスクリプトとして実行された際には、ifブロックが実行されます。しかし、test.py が他の Python ファイルからモジュールとしてインポートされた場合にはifブロックは実行されません。
次のサンプルプログラムで確認してみましょう。
1 2 3 4 5 6 |
# test.py print "Hi" if __name__ == __"main"__: print "Bye" |
実行結果
1 2 |
Hi Bye |
test.pyを実行すると、__name__ の値は自動的に "__main__" に置き換えられ、 if __name__ == “__main__”: 以下のブロックが実行されます。
次に、test.py を import した test2.py を実行すると、次のようになります。
1 2 |
# test2.py import test |
実行結果
1 |
Hi |
このように、他のプログラム(test2.py)からtest.pyをインポートした場合、__name__ はモジュール名である "test" に置き換えられ、if __name__ == "__main__": のブロックは実行されません。
このことを利用して、モジュールを作成する際にはモジュールの使い方を注釈代わりに if __name__ == "__main__": 以下に記述することがあります。if __name__ == "__main__": 以下のブロックに関数の使い方などを記述しておくことで、各モジュールの使い方などがわかり、非常に便利です。