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エンジニアの問題解決に役立つ情報を厳選してお届けします。
この記事の著者
関連記事
新着ホワイトペーパー PR
-
技術文書・技術解説
[ネットアップ合同会社] 金融庁ガイドラインから読み解く、「次世代データレジリエンス」の在り方 -
製品資料
[ネットアップ合同会社] 製造DXでデータ活用ニーズが拡大 分散データ活用とAI活用をどう実践する? -
製品レビュー
[ネットアップ合同会社] AIで使いたいデータが内外に点在、研究におけるAI活用を阻む“真の課題”とは -
製品資料
[株式会社kickflow] 稟議・承認作業の「脱オンプレ・脱Excel・ペーパーレス化」を一気に進める方法 -
製品レビュー
[株式会社kickflow] ワークフローシステムのクラウド化 “みんなが不幸になる”事態を避けるには?
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
なぜ人はいるのにDXが進まない? ライオンも直面した“老害”レガシーシステム
-
2
「エージェントを作るな、スキルを作れ?」 Anthropicが提唱するAI運用の勘所
-
3
「契約業務のAI活用」に関するアンケート
-
4
Microsoft月例パッチ1400件超で過去最多 「限界点」を迎えたパッチ管理
-
5
「データ活用とAI活用の実態」に関するアンケート
-
6
半数がブルーカラー転向を視野に? ベテランエンジニアを追い込む“54歳の壁”
-
7
「ITサービスマネジメントの利用実態」に関するアンケート
-
8
PHP脆弱性「PHP2Shell」で2260万件に影響 情シスの緊急チェックリスト
-
9
障害対応に「余裕なし」が9割超 運用担当316人調査で見えた「運用赤字」
-
10
シャトレーゼを悩ませる偽メール 混乱なしでBIMI導入とDMARC強化を実現した方法
ホワイトペーパーランキング PR
-
1
AI駆動攻撃にどう対抗する? 超速の攻撃からエンドポイントを保護する方法
-
2
2026年のサイバーセキュリティには何が必要か? 最新データに学ぶ傾向と対策
-
3
経験豊富な即戦力人材に直接アプローチできる、「攻めの採用」への転換術
-
4
「IT史に名を残すシステム障害」8選
-
5
最速72分でデータが流出? 最新の脅威トレンドや侵入手法から分かった防衛策
-
6
10G回線の真価をフルに享受するには? 導入前にチェックしたいポイント
-
7
AI駆動開発のスピードと安全性を両立 「品質・セキュリティ管理」の実践ガイド
-
8
HDDを使わない「SSDオンリー」が無謀なのはなぜ?
-
9
「標的型攻撃メール」事例・サンプル集
-
10
不審メールの経路や見せ方に変化? 2026年夏の3事例から見えた動向と対処方法
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー