LoginSignup
2
2

More than 5 years have passed since last update.

if __name__ == '__main__' とはなにか

Last updated at Posted at 2019-02-11

コードの例などでよく見る if __name__ == '__main__'について、ずっとモヤらせていたものを調べたので記録。

if name == 'main' とはなにか

簡単に言えば、「外部からimportして読み込んだときに実行されないようにするため」のもの。

pythonは同じディレクトリであればimport ファイル名でモジュールとして読み込みができる。この読み込みのときにはコード全体が実行されるため、平文で書いていたらimportしたときに値が返ってきてしまう。

たとえば、
python:hello.py
print('hello world')

上のコードを別のファイルから import helloとすると読み込めるが、読み込みと同時にhello worldと返ってきてしまう。これはいけてない。し、場合によっては不具合がでうる。

それを防ぐためには、
python:hello.py
if __name__ == '__main__':
print('hello world')

とするだけでOK。

なぜか

どうやらimportする際には内部で__name__という変数にモジュール名が与えられているらしい。

hello.pyをモジュールとして実行すると__name__helloになる。
なのでif文は実行されなかったという仕組みっぽい。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2