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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,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ではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。