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.
TechTarget発 エンジニア虎の巻
米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。
この記事の著者
関連記事
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
急増する「AIはこう言ってる」マン 判断を狂わせる「AI忖度」を防ぐには?
-
2
取手市がVDIと決別した理由 更改費用「4倍超」を約1.7倍に圧縮
-
3
「Excel至上主義」の終わらせ方 丸2日の手作業地獄から情シスと現場を救うには
-
4
221人調査で分かった「情シス最大のストレス」は?
-
5
「データストレージの活用方法」に関するアンケート
-
6
「AI時代の統合基盤・エンタープライズAI管理」に関するアンケート
-
7
自宅のWi-Fiが「遅い」「途切れる」本当の原因は? Dellが推奨する鉄則
-
8
本当に安いPCで十分か? “すぐ重くなる”を防ぐノートPC選びの絶対条件
-
9
100億円の「Linux更新」を回避 みずほ銀行が選んだ“おきて破り”のRHEL延命策
-
10
Claudeの不可視透かしに批判殺到 著作権消失や誤判定に潜む企業リスク
ホワイトペーパーランキング PR
-
1
年収2000万「クラウドセキュリティのプロ」になれる資格とは
-
2
セキュリティソフトをすり抜ける標的型攻撃メール、不審メールの見破り方とは?
-
3
Windows Updateの通信集中で回線が逼迫、ネットワーク刷新事例に学ぶ解決策
-
4
財務を戦略的組織へ進化させるAI活用術、4つの主要な障壁と解消方法
-
5
「NAS」「SAN」「DAS」は何が違う? いまさら聞けないストレージの基礎
-
6
“あのファイル転送”で暗躍するノーウェアランサム
-
7
標的型攻撃メールを見破るには? サンプル文面を例に傾向を解説
-
8
商用利用の安全性を確保し大量のコンテンツを高速で生成する、AI活用の秘訣
-
9
マンガで解説、1日で生成AI環境を構築できるワークショップの中身とは?
-
10
Dark AIが台頭する時代の新発想、「より高度なAIで対抗する」具体的方法とは?
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー