Pythonの特別変数__name__とは?__main__の仕組みを徹底解説
多くのプログラミング言語と異なり、Pythonは明示的なmain関数から実行を開始するようには設計されていません。その代わりに、__name__という特別な変数がmain関数に相当する役割を担っています。__name__はPythonに組み込みの変数なので、以下のように短いコードを書くだけでその値を確認できます。
print(type(__name__)) print(__name__)
このコードを実行すると、次のような結果が得られます。
<class 'str'> __main__
ご覧のとおり、__name__変数の値は文字列型であり、その値は__main__になっています。ここからは、__name__変数の重要な特徴を2つ紹介します。
1. スクリプトを直接実行した場合は__main__になる
他のスクリプトを参照しない、独立して書かれたPythonスクリプトを直接実行すると、__name__変数の値は__main__になります。
この動作を確認するために、standalone.pyという名前のプログラムを作成してみましょう。
def func1():
print('The value of __name__ is ' + __name__)
if __name__ == '__main__':
func1()
実行結果:
The value of __name__ is __main__
予想どおり、__name__変数は__main__と評価されるため、このような出力になります。
2. スクリプトをインポートした場合はモジュール名になる
2つ目の特徴は、あるPythonスクリプトを別のスクリプトにインポートするケースに関するものです。このシナリオでは、main()関数と見なせる2つの異なるスコープが存在することになります。1つは現在実行中のプログラムの__main__変数のスコープ、もう1つは現在のプログラムで利用しているインポート済みスクリプト側の__main__変数のスコープです。
では、どちらの__main__変数が使われるのでしょうか?
インポートしたスクリプトの関数を実行した場合、その中の__name__変数は__main__ではなく、スクリプト(モジュール)の実際の名前として評価されます。
一方、インポートしたスクリプトを参照せずに現在のプログラム自身で__name__変数の値を調べると、期待どおり__main__と評価されます。これは、その箇所がプログラムの最上位レベル(インデントレベル0)のスコープで実行されているためです。
以下のプログラムでこの例を見てみましょう。
例
import standalone as sa
print('Running the imported script')
sa.func1()
print('\n')
print('Running the current script')
print('The value of __name__ is ' + __name__)
出力
上記のコードを実行すると、次のような結果が得られます。
Running the imported script The value of __name__ is standalone Running the current script The value of __name__ is __main__
この仕組みの有用性
if __name__ == "__main__":というコードを使用すると、Pythonインタープリターは「現在実行中のスクリプトを解析しているのか」「それとも外部スクリプトとして一時的に解析しているのか」を判定できます。これにより、プログラマーは状況に応じて外部スクリプト側のコードを実行するかどうかを選択でき、プログラムのさまざまな部分の挙動を柔軟に制御できるようになります。
実際の開発では、モジュールとして再利用したい処理をファイルに記述し、その下にif __name__ == "__main__":ブロックを置いてテスト用コードやエントリーポイントを分離するのが定番のパターンです。このおかげで、同じファイルを「単体実行するスクリプト」としても「他から読み込むライブラリ」としても使えるのです。
-
【初心者向け】Python変数の使い方徹底ガイド|宣言・再代入・削除・命名規則を解説
Pythonの変数は、プログラム内に値を保存するための仕組みです。変数は「ラベル(名前)」と「値」の2つの要素で構成され、この2つは等号(=)で結ばれます。プログラム中ではラベルを使って、その変数に代入された値を参照できます。また、変数が保持する値は後から自由に変更可能です。 変数はプログラミングに欠かせない存在です。変数を使えば、特定の名前と紐づけてデータをプログラム内に保存できます。 たとえば、地元のスーパーで販売されているチョコレートの一覧を保存する chocolate という変数を作ったり、ゲームアプリでユーザー名を保存する username という変数を作ったりできます。 この
-
PythonのMatplotlibでplt.title()に変数を組み込む方法
PythonのMatplotlibでplt.title()に変数を組み込みたい場合、いくつかの簡単なステップで実現できます。ここでは、変数numの値をグラフのタイトルに動的に反映させる方法を解説します。 実装の手順 numpyを使ってxとyのデータポイントを作成します。変数numを用いてyの値を計算し、この値をタイトルに設定します。 plot()メソッドを使って、xとyのデータポイントを赤色(c=red)でプロットします。 曲線のタイトルに変数numを含めて設定します。文字列フォーマット(%記法やf文字列)を活用することで、変数の値をタイトルに埋め込めます。 図を画面に表示するには、show