Pythonで__name__を使う方法【初心者向け】

初心者向けにPythonで__name__を使う方法について解説しています。Pythonの特別なグローバル変数のひとつ__name__の役割と基本の構文、実行結果の見かたを実際の例で確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

Pythonで__name__を使う方法について解説します。

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

__name__の使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

__name__とは

__name__とは、 Python のプログラムがどこから呼ばれて実行されているかを格納している変数です。 Python のプログラムは、コマンドラインから直接呼ばれるか、import文で他のプログラムから参照されて呼ばれます。その区別を__name__で行うことができます。

なお、__name__は Python の特殊なグローバル変数の1つです。これらのグローバル変数には、 Python のプログラムが実行される前に自動的に値が設定されます。グローバル変数は __name__ の他、 __spec__ , __file__, __cached__, __loader__, __package__ などがあります。詳しくは公式ドキュメントを参考にしてください。

https://docs.python.jp/3/library/runpy.html

 

__name__の使い方

__name__ の主な使い方は __main__ と組み合わせて、コマンドラインから直接呼ばれたかを判定することです。Python のプログラムがコマンドラインから直接呼ばれた場合、 __name__ には __main__ という文字列が格納されます。なお、importで他のプログラムから呼ばれた場合、ファイル名が格納されます。

if __name__ == '__main__':
    # 直接呼ばれた場合の処理を記述する

Python のプログラムが複数のファイルで構成されている場合、それぞれのファイルでコマンドラインから直接呼ばれた場合の処理を記述しておくことで、それぞれのファイルを個別に実行することができます。

例えば、import文で他のプログラムから参照する前に、1つ1つのファイルが正しく動作するかテストを行うような場合に便利です。なお、テストは unittest を利用した方法もあります。 unittest については以下の記事も参考にしてくださいね。

Pythonのunittestの使い方

 

[PR] Pythonで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回のサンプルプログラムは、コマンドラインから直接呼ばれた場合とimport文で他のプログラムから参照された場合とで、 __name__ の値が異なることを確認します。以下の2つのファイルを作成してください。

my_lib.py

def print_name():
    print(__name__)

if __name__ == '__main__':
    print_name()

test.py

import my_lib

my_lib.print_name()

実行はコマンドラインから行います。はじめにtest.pyです。

>>> python test.py

実行結果は以下のようになります。test.pyからimportされて呼ばれたために、ファイル名である my_lib が格納されています。

my_lib

次に、my_lib.pyを直接実行します。

>>> my_lib.py

実行結果は以下のようになります。今度はコマンドラインから直接呼ばれたため、 __main__ が格納されています。

__main__

 

この記事を監修してくれた方

太田和樹(おおたかずき)
ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。