Pythonを勉強していると、「if __name__ == ‘__main__’:」というコードに出会うことがあります。
一見すると、C言語などのmain関数と同じ役割のコードに思えますが、そもそもPythonにはmain関数が不要ということもあり、役割が大きく異なります。
そこで今回は、「if __name__ == ‘__main__’:」の意味と使い方を簡単に紹介します。
「__name__」とは?
まずは、「__name__」について簡単に説明します。
「__name__」とは、モジュールをimportしたときに、モジュール名が代入される変数のことです。
次のサンプルプログラムをみてください。
◆サンプルプログラム:
import random print(random.__name__)
◆実行結果:
random
randomモジュールをインポートして、「random.__name__」変数に格納されている値を出力すると、’random’という文字列が格納されていることがわかりますよね。
※importについて詳しく知りたい方は、以下の記事を参考にしてください。

ただし、「__name__」そのものを使う場合は、作成したPythonプログラムをファイルとして保存し(例えば「test.py」)、スクリプトとして実行した場合(例えば「python test.py」として実行した場合)にのみ、「__name__」に「’__main__’」という文字列が格納されます。
「’__main__’」とは?
つまり、「if __name__ == ‘__main__’」は、このプログラムがスクリプトとして実行されたかどうかを判定するコードなんですよね。
次のサンプルプログラムをみてください。
◆サンプルプログラム:
import random print(random.__name__) if __name__ == '__main__': print('main')
◆実行結果:
random main
スクリプトとして実行したので、print(‘main’)処理が実行されました。
また、今回のサンプルプログラムをみてわかるように、「if __name__ == ‘__main__’」は、C言語のmain関数のように優先的に実行されるわけではありません。単純な「if文」の処理だからです。
※if文について詳しく知りたい方は、以下の記事を参考にしてください。

「if __name__ == ‘__main__’:」の使い方
では、いつ「if __name__ == ‘__main__’:」を使えばいいのでしょうか。
基本的には、スクリプトとして実行したときにだけ、デバッグしたいコードを書きます。
次のサンプルプログラムをみてください。
◆main_test1:
import random def test_print(): print("Hello World") print(random.__name__) if __name__ == '__main__': print('main')
◆main_test2:
import main_test1 main_test.test_print()
◆実行結果(main_test1.py):
random main
◆実行結果(main_test2.py):
random Hello World
main_test1.pyを実行したときは、「if __name__ == ‘__main__’:」の下にある処理「print(‘main’)」が実行されていますが、main_test2.pyからモジュールとしてimportしたときは、実行されていませんよね。
このように、スクリプトとして実行したときにだけ、実行したいコードを「if __name__ == ‘__main__’:」の下に書きます。
まとめ
今回は、Pythonの「if __name__ == ‘__main__’:」の意味と使い方を簡単に紹介してきました。
主にデバッグ用途として使われる機能ですが、必要になることもあると思うので、ぜひ習得してください。
コメント