Pythonサンプルコードを見ていると「if __name__ == ‘__main__’」と記述されていることがよくありますよね?
意味が分からないと、その時点でコード解読離脱してしまいます。
本記事では、この構文が何を意味し、どんなときに使うのかを解説します。
Python学習を始めたばかりの人
if __name__ == ‘__main__’の意味と用途
if __name__ == ‘__main__’の意味は、もしPythonコードが直接実行されたときは以降のコードを処理し、モジュールとして呼び出されたときは処理しないです。
用途は、モジュールを呼び出したときに、勝手に処理が実行されることを防ぐことです。また、モジュールの単体テスト用としても使われます。コードを直接実行したときと、モジュールとして他のコードから呼び出されたときの処理を分けることでモジュールの単体テストを可能とします。
モジュールの単体テスト用ですから、Pythonコードが1ファイルの場合は、この構文は必要ありません。
次項では、Pythonコードが直接実行されたときのみ処理する仕組みを解説します。
__name__変数とは
__name__変数とは、モジュール名を返す特別な変数です。importで他のコードから呼び出された場合は、__name__はファイル名となります。一方、コードを直接実行した場合は、__name__はファイル名となります。
サンプルプログラムで確認していきましょう。
モジュール「module.py」とメインコード「main.py」を用意しました。
def func():
return __name__
if __name__ == '__main__':
print('__name__ = ' + func())
import module
print('__name__ = ' + module.func())
それぞれのファイルを実行してみますと下表のようになったのではないでしょうか?
実行ファイル | module.py | main.py |
---|---|---|
__name__ | __main__ | module |
main.pyからmodule.pyをimportしたときは、”if name == ‘main’:” 以降の処理が実行されないのがお分かりですね。
まとめ
Pythonサンプルコードでよく見る「if __name__ == ‘__main__’」の意味と用途について解説しました。
意味
- もしPythonコードが直接実行されたときは以降のコードを処理し、モジュールとして呼び出されたときは処理しない
用途
- モジュールを呼び出したときに、勝手に処理が実行されることを防ぐ
- モジュールの単体テスト用
今回の記事が皆さんのPython学習に役立つなら幸いです。
Python独学が大変な方は、書籍やスクールを活用するのも手です。