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エンジニアの問題解決に役立つ情報を厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

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

news103.jpg

なぜ料理の失敗写真がパッケージに? クノールが展開する「ジレニアル世代」向けキャンペーンの真意
調味料ブランドのKnorr(クノール)は季節限定のホリデーマーケティングキャンペーン「#E...

news160.jpg

業界トップランナーが語る「イベントDX」 リアルもオンラインも、もっと変われる
コロナ禍を経て、イベントの在り方は大きく変わった。データを駆使してイベントの体験価...

news210.png

SEOを強化するサイトの9割超が表示速度を重視 で、対策にいくら投資している?
Reproが「Webサイトの表示速度改善についての実態調査 2024」レポートを公開。表示速度改...