Pythonの謎構文「if __name__ == “__main__”」には何の意味があるのか:Pythonの「if __name__ == “__main__”」とは【中編】
「if __name__ == “__main__”」という構文は、「Python」のプログラミングでしばしば目にする構文だ。この構文が意味するところを、例を挙げながら説明する。
プログラミング初心者にとって「Python」は、文法や機能などの面から親しみやすいプログラミング言語だ。Pythonについて学ぶ中で、開発者は「if __name__ == “__main__”」という構文を目にする機会がある。何をするためのものなのか一見分かりづらいこの構文は、何を意味するのか。以下で例を使いながら、この構文を読み解いていこう。
if __name__ == “__main__”とはどういう意味なのか
併せて読みたいお薦め記事
連載:Pythonの「if __name__ == “__main__”」とは
Pythonについて学ぶ
「__name__」は、Pythonのランタイム(実行環境)が管理する特別な変数だ。Pythonプログラム実行時、インタープリタ(プログラムの実行時にソースコードを1行ずつ解釈して実行するソフトウェア)は__name__をはじめとする幾つかの変数に値を格納する。__name__は、状況によって以下の2通りの値を持つ。
- Pythonプログラムがスタンドアロンアプリケーションとして単体で実行される場合、__name__の値は「__main__」になる
- Pythonプログラムがモジュールとしてインポートされる場合、__name__はモジュールの名前になる
すなわちif __name__ == “__main__”という条件文は、Pythonプログラムがスタンドアロンアプリケーションとして実行されたのか、モジュールとしてインポートされたのかをインタープリタが判断するためにある。
例で見る__name__の違い
以下の2つのPythonプログラムは、__name__変数の動作の違いを示すものだ。
1つ目の「helper.py」は、このプログラムを単体で実行する場合と、モジュールとしてインポートされる場合で動作が異なることを示すサンプルプログラムだ。「print」は、標準出力二文字列を出力する関数だ。
print("__name__ in helper.py: " + __name__)
Pythonプログラムを実行するための「py」コマンドを使って、このプログラムを単体で実行すると、出力は以下のようになる。
__name__ in helper.py: __main__
2つ目の「app.py」は、helper.pyファイルを「helper」モジュールとしてインポートし、プログラム本体の__name__を出力するサンプルプログラムだ。
import helper print("__name__ in app.py: " + __name__)
pyコマンドを使ってapp.pyを実行すると、出力は以下のようになる。
__name__ in helper.py: helper __name__ in app.py: __main__
この出力から、呼び出した先のhelper.pyファイルでは__name__にモジュール名「helper」が格納されており、app.pyの__name__には「__main__」が格納されていることが分かる。
もし両プログラムのprint文が、if __name__ == “__main__”の条件が真のときに実行されるブロック(ソースコードのまとまり)にある場合、helper.pyファイルのprint文は実行されない。具体的には、helper.pyが以下の通りであることを考える。
if __name__ == "__main__": print("__name__ in helper.py: " + __name__)
app.pyは以下の通りだと仮定しよう。
import helper if __name__ == "__main__": print("__name__ in app.py: " + __name__)
このときapp.pyの実行結果は以下のように、app.pyのprint文の出力のみになる。helper.pyのprint文は、helper.pyを単体で実行したときにしか呼び出されないからだ。
__name__ in app.py: __main__
次回は、より具体的なサンプルプログラムを使ってif __name__ == “__main__”の用例を解説する。
TechTarget発 エンジニア虎の巻
米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。
Copyright © ITmedia, Inc. All Rights Reserved.