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 マーケティング新着記事

news050.jpg

ウェルビーイング調査 今後最も力を入れたい分野は「身体」、優先度が低いのは?
ASAKO サステナラボは、独自の「60のウェルビーイング指標」により生活者の充足度を数値...

news068.png

10代の7割超がショート動画を「ほぼ毎日見ている」――LINEリサーチ調査
LINEリサーチは全国の男女を対象に、ショート動画に関する調査を実施しました。

news158.png

自社の変化に対して行動する従業員はわずか2割 なぜそうなる?――電通調査
自社の変化に対する従業員の意識について確認するための調査結果です。