pythonモジュールインポート_name__


メインプログラムコードは通常、前に見たコードと似ています.チェック_name__ 変数の値は、次に対応するコールを実行します(次のページのコアノートを参照).メインプログラムのコードには、通常、変数付与、クラス定義、および関数定義が含まれます.次に、別の関数(通常main()関数を呼び出す)を呼び出してモジュールの機能を完了するかどうかを決定するには、__name_をチェックします.メインプログラムは通常これらのことをします.(私たちの上記の例ではmain()ではなくtest()を使用しているのは、コアノートを読む前に迷うことを避けるためです.)どんな名前を使っても、テストコードを置くのにいいところだと強調したい.私たちは3.4にいます.2節で述べたように、ほとんどのPythonモジュールは呼び出しをインポートするために使用されており、直接実行モジュールはそのモジュールの回帰テストコードを呼び出すべきである.
 
メインプログラムコードは、モジュールがインポートされても直接実行されても実行されるため、モジュールが実行方向をどのように決定するかを知る必要があります.あるアプリケーションは別のアプリケーションのモジュールをインポートする必要がある場合があります.いくつかの有用なコードを再利用するために使用します(そうしないと、そのアプリケーションを実行するのではなく、コピーで貼り付ける愚かな手段しかありません).この場合、他のアプリケーションにあるコードにアクセスしたいだけです.そのため、問題が発生しました.「Pythonは、実行時にモジュールがインポートされたか、直接実行されたかを検出する方法がありますか?」答えは...(鼓声雷动).....そうだ!name__ システム変数が正解です.モジュールがインポートされている場合、_name__ の値は、モジュール名です.モジュールが直接実行されている場合は、_name__ の値は'_です.main__'
 
すべてのPythonモジュールはオブジェクトであり、いくつかの有用な属性があります.これらのプロパティを使用すると、作成したモジュールを簡単にテストできます.次はif__を使用します.name__ のテクニックです.
if __name__ == "main":
新しいことを学び続ける前に、いくつかの重要な観察結果があります.まずif式はカッコで囲む必要はありません.次にif文はコロンで終わり,その後はインデントコードが続く.
Cと同様にPythonは==を用いて比較し,=を用いて付与する.Cと異なり、Pythonでは行内付与はサポートされていないため、比較しようとしても意外に付与されることはありません.
では、なぜこの特殊なif文がテクニックなのでしょうか.モジュールはオブジェクトであり、すべてのモジュールには組み込み属性があります.name__ .モジュールの_name__ の値は、モジュールをどのように適用するかによって異なります.importモジュールの場合_name__ の値は、通常、パスまたはファイル拡張子を持たないモジュールのファイル名です.しかし、標準的なプログラムのようにモジュールを直接実行することもできます.この場合_name__ の値は特別なデフォルト値になります.main__ .
>>> 

import

 odbchelper

>>> 

odbchelper.__name__


'odbchelper'


これを理解すると、モジュール内でif文を追加するテストキットを設計できます.モジュールを直接実行すると、_name__ の値はmain__ , したがって、テストキットは実行されます.モジュールをインポートすると、_name__ の値は別のものなので、テストキットは無視されます.これにより、新しいモジュールを大きなプログラムに統合する前に、開発とデバッグが容易になります.