if __name__==”__main__”って何?

Pythonのプログラムを見ていると、時折、if __name__=="__main__"というコードが見受けられます。

初見では、理解できないと思いましたので、紹介します。

また、以下の記事を読んでから本記事を読むことをおススメします。

__name__とは

__name__は、Pythonでは、重要な変数になります。

この変数には、このPythonファイルのモジュール名が文字列で入っています。

import sample とされた場合、 sample.py 内部での__name__ は” sample “になります。

__main__とは

python sample.py のようにPythonファイルをスクリプトとして直接実行した場合、 sample.py の内部の __name__ 変数は "__main__" という文字列になります。

import で実行された場合と直接実行された場合で、__name__関数は異なるということです。

importで実行された場合、そのファイル名(sample.pyはsample)となり、
スクリプトとして直接実行された場合、"__main__"となります。

したがって、 if __name__ =="__main__"という if文を使うことで、Pythonファイルをスクリプトとして直接実行された場合のみ実行されたと判定できます。

具体例

sample_01.pyで以下のようなコードを書きます。

print("This is a python sample file.")

続いてsample_02.pyで以下ようなコードを書きます。

import sample_01

sample_02.pyを実行しましょう。

$ python sample_02.py
This is a python sample file.
なんとsample_01.pyの内容が出力されました。

では、sample_01.pyを以下のように編集します。

if __name__=="__main__":
    print("This is a python sample file.")

そして、sample_02.pyを実行してみましょう。

$ python sample_02.py
sample_01.pyの内容が出力されませんでした。

importで実行されないように__name__=="__main__"は、あるようです。

まとめ

__name__関数は、Pythonファイルのモジュール名が文字列で入っています。

__main__は、スクリプトとして直接実行されたことを指します。