Pythonの「__name__」と「__main__」とは?
Pythonのプログラムに「if __name__ == '__main__’:」と書かれているプログラムがあります。
この「__name__」と「’__main__’にはどんな意味があるのでしょう。
モジュールをimportすると実行される文
Pythonのモジュール (module)にはimportされたタイミングで実行される文があります。
「関数」や「クラス内」に書かれた処理はimportされたタイミングで実行されます。
例えばモジュール (module)のソースを
#他のプログラムから呼び出される関数 def add_num( x, y ) : return x + y ; print( "__name__={}".format( __name__ )) #この文はimportされたタイミングでも実行される
モジュール (module)のimportソースを
import sub_module
とします。
この状態で
python main.py
とPythonを起動すると
__name__=sub_module
と「__name__」の値に「モジュール名」が代入された文が実行されます。
これはimportしたタイミングでimportしたプログラムの内容が実行されたことになります。
次に
python sub_module.py
とimportされるモジュール名でPythonを起動すると
__name__=__main__
と今度は「__name__」の値に「__main__」が代入されました。
これはPythonのプログラムで最初に読みこむプログラム(エントリーポイント)になるものには、そのモジュール名(ソース名)ではなく「__main__」という値が代入されることになっているためです。
これを使って「importされた時には動作しない」処理をソースに書くことができるようになっています。
それがPythonのプログラムでよく見かける
if __name__ == '__main__':
です。
if文のブロックはPythonで最初に読みこむプログラム(エントリーポイント)として起動された時のみ実行され、他のプログラムからimportされた場合には実行されなくなります。
#他のプログラムから呼び出される関数 def add_num( x, y ) : return x + y ; if __name__ == '__main__': print( "__name__={}".format( __name__ )) #この文は起動プログラムとして読まれた時だけ実行される。
で
python main.py
と実行しても何も表示されませんが、
python sub_module.py
で起動すると
__name__=__main__
と表示されるようになります。
まとめ
「if __name__ == '__main__’:」以下のブロックはプログラムの最初(エントリーポイント)として読みこまれた時のみ実行されるようにし、import時には実行されないようにするためのif文です。