Pythonの「__name__」と「__main__」とは?

2021/01/13Python

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文です。


株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ