logo

Python の __name__

現在実行中の Python スクリプトまたはモジュールの名前は、Python の __name__ 特殊変数に保存されます。 Python 3.0 では、Python 2.x には存在しない __name__ 変数が導入されました。現在の Python スクリプトまたはモジュールの値 __main__ は、実行中に __name__ 変数に割り当てられます。

_name_ とはどういう意味ですか?

Python には、現在実行中のスクリプトまたはモジュールの名前を格納する __name__ という組み込み変数があります。現在のモジュールが実行中でない限り、スクリプトまたはモジュールの名前は __name__ 変数に保存されます。実行中の場合は、値 __main__ が割り当てられます。

したがって、Python スクリプトが実行されているとき、別の Python スクリプトにインポートされる場合、その __name__ 変数の値は常に __main__ である必要があります。そうでない場合は、モジュールの名前が表示されます。

例 :

これをさらに理解するために、例を使用してみましょう。作る testing.py という Python のスクリプト、 次のコードをそれに追加します。

chmod 755
 # Code to define a function def anything(): print('Value of the __name__ : ', __name__) anything() 

出力:

 Value of the __name__ : __main__ 

説明:

「名前の値: main」という出力が示すように、スクリプトはメイン プログラムとしてすぐに実行されます。 Python では、スクリプトが直接実行されると、スクリプトの __name__ 変数の値は自動的に '__main__' に設定されます。この出力は、スクリプトがモジュールとして別のスクリプトにインポートされるのではなく、直接実行されていることを確認します。

次に、という名前の別の Python スクリプトを構築しましょう。 mains.py そして前のものをそこにインポートします。

例 :

 # importing testing.py import testing testing.anything() 

出力:

 Value of the __name__ : testing 

説明:

テスト中。 anything() は、インポート テストを使用してスクリプト testing.py が別の Python スクリプトにインポートされるときに実行されるメソッドです。この状況では、モジュールの名前 (この場合は「testing」) が、「__main__」ではなく testing.py の __name__ 変数の値として設定されます。このため、テストの出力。 anything() は「__name__ の値: テスト中」です。これは、スクリプトを直接実行する場合とモジュールとしてインポートする場合が __name__ 変数の値にどのような影響を与えるかを示しています。

if name == main という条件を使用します。

私たちが使用するのは、 if ステートメント そしてその状態 __name__ == __main__ それを宣言する 特定の Python コード だけであるべきです スクリプトが直接実行されたときに実行されます

例 :

 # importing testing.py import testing if __name__ == __main__: testing.anything() 

この場合、現在のモジュールまたはスクリプトが独立して実行できるかどうかは、文字列 __main__ を使用して確認されます。 __name__ 変数のキーワードが予約済みまたは特殊であることを Python インタプリタに示すために、用語の両側に 2 つのアンダースコアがあります。

Python での名前のコード例:

前に述べたように、コード ファイルを実行すると、コードは別のファイルにインポートされることもなく直接実行され、その結果、__name__ 変数の値が __main__ に変更されます。

 # defining a function def anything(): print('It is a function in the ScriptP1.') if __name__=='__main__': anything() print('Called from the ScriptP1.') else: print('ScriptP1 is imported into another file.') 

出力:

 It is a function in the ScriptP1. Called from the ScriptP1. 

説明:

COBOLプログラミング

「It is a function in the ScriptP1.」という出力が示すように、スクリプト ScriptP1 で指定された関数 anything() は、メイン プログラムとして直接実行されています。続いて「ScriptP1 から呼び出されます」。スクリプトが Python で直接実行される場合、__name__ 変数は '__main__' に設定されます。したがって、条件 if __name__=='__main__': は True と評価され、関数 anything() が呼び出されます。続く print ステートメントは、スクリプトが実際に直接実行されていることを検証します。

ここで、ScriptP2.py という名前の新しい Python スクリプト ファイルを作成し、そこに ScriptP1.py をインポートし、ScriptP1 メソッド anything() を呼び出してみます。

コード:ScriptP2.py コードはここにあります:

 import ScriptP1 if __name__=='__main__': ScriptP1.anything() print('Called from the ScriptP2.') 

出力:

 ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2. 

説明:

提供されている Python スクリプトは、「ScriptP1」モジュールをアクティブなスクリプトにインポートする方法を示しています。メソッド「anything()」は「ScriptP1」に存在し、メイン スクリプトで呼び出されます。この関数が呼び出され、スクリプトは「ScriptP2 から呼び出されました」と出力します。関数呼び出しが完了したことを示します。このイベント フローは、「ScriptP1」で指定された関数がアクセス可能であり、現在実行中のスクリプト (「ScriptP2」として識別される) のコンテキストで正常に実行されたことを示します。

ScriptP1 のインポート ステートメントが ScriptP2 内で実行されたとき、__name__ 変数の値は ScriptP1 (モジュール名) でした。ただし、ScriptP2 は最初に実行されたスクリプトであるため、値は __main__ になります。

__name__ の値の出力:

理解を深めるために、実行の各段階で __name__ 変数の値を出力してみましょう。

例 : ScriptP1.py Python スクリプトのソース コードは以下に提供されます。

 print('Value or the variable __name__ : ' + __name__) 

出力:

 Value or the variable __name__ : __main__ 

説明:

execvp

提供されている Python コードのサンプルは、変数 __name__ の値を出力します。スクリプトが直接実行されると、この値は「main」と評価されます。これは、スクリプトが直接起動されると、if __name__ == '__main__': 条件の後のコード ブロックが、モジュールとして別のスクリプトにインポートされるのではなく、実行されることを意味します。この種の動作は、スクリプトをプライマリ アプリケーションとして実行することと、スクリプトをモジュールとして別のスクリプトにインポートすることを区別するためによく使用されます。

例 2: そして、これがスクリプト ScriptP2.py のソース コードです。

 # importing the file ScriptP1.py import ScriptP1 print('Value or the variable __name__ : ' + __name__) 

出力:

 Value or the variable __name__ : __main__ 

説明:

提供された Python スクリプトは、import ステートメントを使用してファイル「ScriptP1.py」をインポートします。 ' 実行すると、変数 __name__ の値として「main」が出力されます。これは、スクリプトがモジュールとして別のスクリプトにインポートされるのではなく、プライマリ アプリケーションとして直接実行されることを意味します。 Python スクリプトを実行するとき、これは通常の動作です。スクリプトの実行コンテキストは __name__ 変数に反映されます。

まとめ :

ほとんどのプログラミング言語では、通常、main メソッドまたは関数がプログラムを実行するポイントとして利用されます。しかし、Python ではどうでしょうか? Python プログラム (スクリプト) の実行は、通常、行 0 またはプログラムのインデント レベル 0 から始まります。ただし、__name__ 変数の作成は、Python プログラムが実行される前に行われます。この変数は、Python の main メソッドを置き換えるために使用される可能性があります。