コードの例などでよく見る if __name__ == '__main__'
について、ずっとモヤらせていたものを調べたので記録。
#if name == 'main' とはなにか
簡単に言えば、「外部からimportして読み込んだときに実行されないようにするため」のもの。
pythonは同じディレクトリであればimport ファイル名
でモジュールとして読み込みができる。この読み込みのときにはコード全体が実行されるため、平文で書いていたらimportしたときに値が返ってきてしまう。
たとえば、
hello.py
print('hello world')
上のコードを別のファイルから import hello
とすると読み込めるが、読み込みと同時にhello world
と返ってきてしまう。これはいけてない。し、場合によっては不具合がでうる。
それを防ぐためには、
hello.py
if __name__ == '__main__':
print('hello world')
とするだけでOK。
#なぜか
どうやらimportする際には内部で__name__
という変数にモジュール名が与えられているらしい。
hello.pyをモジュールとして実行すると__name__
はhello
になる。
なのでif文は実行されなかったという仕組みっぽい。