ども、木村です。本業はデータサイエンティスト、副業でアプリ開発をしています。
本記事は、Pythonのソースコードでよく見かけるif __name__ == '__main__'
の意味について解説します。
if __name__ == ‘__main__’の意味がわからない方
if __name__ == ‘__main__’がなかったら?
まず最初にif __name__ == '__main__'
がなかったらどうなるのかを考えてみましょう。
たとえば以下のようなPythonファイル(hello.py)を作成したとします。
def Hello():
print("Hello")
Hello()
このように書いても実際にファイルは動作して以下のような実行結果になります。
Hello
しかしここで一点問題が発生します。
他のファイルからこのhello.pyをimportとすると、処理は呼び出していないにもかかわず勝手に処理が実行されてしまいます。
たとえばperson.py作成し以下のように記述し実行してみてください。
import hello
def Person():
print("No")
Person()
そうするとhello.pyの内容が勝手に実行されてしまいます。
これを防ぐためには、hello.pyの中身を以下のように変更する必要があります。
def Hello():
print("Hello")
if __name__ == '__main__':
Hello()
上記の内容でコマンドラインからperson.pyを実行するとhello.pyの内容が勝手に実行されなくなります。
“if __name__ == ‘__main__'”とは?
結論から言うと、”if __name__ == ‘__main__'”以下に書かれた処理については、コマンドライン(MacであればTerminalなど)から実行された場合のみに処理されます。
さらに、細かく分解して理解していきたいと思います。
__name__とは?
__name__
とは、本来インポートしたモジュールの名前を文字列として格納してくれる標準機能です。
例えば以下のソースコードを実行してみてください。
import numpy as np
print(np.name)
実行結果
numpy
このようにインポートしたモジュールの名前を文字列として取得することができます。
__name__は読み込んだモジュール名を保存する
'__main__'
とは?
'__main__'
は、コマンドラインから実行した場合自動的に__main__
という文字列が__name__
に設定されます。
例えばあなたがhello.pyというファイルを作成し、コマンドラインからpython hello.py
を実行した場合、'__main__'
という文字列が__name__
に格納されます。
ここでポイントとなるのは、格納される対象となるのはコマンドラインから実行したモジュールという点です。
コマンドラインしたら、'__main__'
という文字列が__name__
に格納される
まとめ:”if __name__ == ‘__main__'”の意味
つまり上記の点をまとめると、"if __name__ == '__main__'"
の意味は「もしこれから実行するファイルがコマンドラインから実行されるファイルであれば以下の処理を実行する」といった内容になります。
そのため、Pythonのファイルをコマンドラインから実行したい場合は必ず、"if __name__ == '__main__'"
をする必要があるのです。
Pythonの勉強法を徹底的にまとめました!
Pythonの勉強方法にお困りの方はぜひご参考ください!
【入門】未経験からのPythonの勉強・学習方法
Pythonの入門学習におすすめのUdemy教材 7選
【厳選】Pythonに入門できる書籍 3選
まとめ
Pythonを始めたての頃は時々目にするこの”if __name__ == ‘__main__'”の意味がわからず見るのが嫌になることでしょう。
しかし、意味さえわかればとっても簡単ですよね?
コマンドラインからPythonファイルを実行するときは”if __name__ == ‘__main__'”の記載を忘れないようにしましょう!