Python他のスクリプトから参照を意識した書き方。

python コンピュータ

Pythonのスクリプトでよくif (__name__ == '__main__'):というコードを目にします。
意味を理解しないで使っていたので調べてみました。

Pythonは一般的なスクリプトと同様にエントリーポイント(開始位置)となる関数があるわけでは無く、スクリプトに記述した通りに上から実行されます。単独で実行する短いスクリプトであればよいですが、ある程度コードの量が多くなる場合は関数で分割することになります。そういった場合エントリーポイントとなる関数を用意し、スクリプトの最終行でその関数を呼び出すようにした方が見通しが良くなります。

関数を上手に作ると、他のスクリプトでも利用することが出来ます。
そのような場合、他のスクリプトから関数を持つスクリプトを参照するわけですが、エントリーポイントの呼び出しが2つになり都合が悪いです。

そういった不都合を回避するため以下のような分岐を処理を施します。

ファイル名:test.py

def func():
    print("HOGE")

print(__name__)

if (__name__ == '__main__'):
    func()

結果

__main__
HOGE

スクリプトを直接実行すると__name__には"__main__"が入っているのでifの条件が成立しfunc()の呼び出しが実行されます。

別のスクリプトから参照してみます。

ファイル名:test2.py

import test

test.func()

結果

test
HOGE

他のスクリプトを実行した場合、__name__にはモジュール名(参照ファイル名)がセットされているようです。
そうなると、参照元のif条件は成立しますが参照先のifの条件が成立しないためfunc()は呼び出しは実行されません。
結果HOGEの出力は参照元の1回のみとなります。

コメント