Pythonの謎構文「if __name__ == “__main__”」には何の意味があるのかPythonの「if __name__ == “__main__”」とは【中編】

「if __name__ == “__main__”」という構文は、「Python」のプログラミングでしばしば目にする構文だ。この構文が意味するところを、例を挙げながら説明する。

2024年03月29日 05時00分 公開
[Kevin McAleerTechTarget]

 プログラミング初心者にとって「Python」は、文法や機能などの面から親しみやすいプログラミング言語だ。Pythonについて学ぶ中で、開発者は「if __name__ == “__main__”」という構文を目にする機会がある。何をするためのものなのか一見分かりづらいこの構文は、何を意味するのか。以下で例を使いながら、この構文を読み解いていこう。

if __name__ == “__main__”とはどういう意味なのか

 「__name__」は、Pythonのランタイム(実行環境)が管理する特別な変数だ。Pythonプログラム実行時、インタープリタ(プログラムの実行時にソースコードを1行ずつ解釈して実行するソフトウェア)は__name__をはじめとする幾つかの変数に値を格納する。__name__は、状況によって以下の2通りの値を持つ。

  1. Pythonプログラムがスタンドアロンアプリケーションとして単体で実行される場合、__name__の値は「__main__」になる
  2. 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エンジニアの問題解決に役立つ情報を厳選してお届けします。

ITmedia マーケティング新着記事

news061.png

高齢男性はレジ待ちが苦手、女性は待たないためにアプリを活用――アイリッジ調査
実店舗を持つ企業が「アプリでどのようなユーザー体験を提供すべきか」を考えるヒントが...

news193.jpg

IASがブランドセーフティーの計測を拡張 誤報に関するレポートを追加
IASは、ブランドセーフティーと適合性の計測ソリューションを拡張し、誤報とともに広告が...

news047.png

【Googleが公式見解を発表】中古ドメインを絶対に使ってはいけない理由とは?
Googleが中古ドメインの不正利用を禁止を公式に発表しました。その理由や今後の対応につ...