33
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで使用する if __name__ == '__main__': の意味

Last updated at Posted at 2022-04-07

概要

Pythonを学習していると__name__ == '__main__'という謎の構文が出てきて、
それについて調べたのでアウトプットしたいと思います。

使い方

__name__ == '__main__'は簡単に言うとファイルを読み込んだ際に
関数などの実行を制御してくれるものです。
例えば下記のようなファイルがあるとします。

sample.py
def hello():
  print("Hello!")

hello()

hello()を別ファイルで使用しようとしたときファイルをimportします。

example.py
from sample import hello

hello()

このときexample.pyファイルを実行するとどうなるか

python example.py // pyファイルの実行コマンド
// => Hello!
      Hello!

Hello!が2度表示されてしまいます。
これはファイルをimportすると読み込み先のファイルに記載されている関数が実行されるためです。
これを制御するためにif __name__ == '__main__':を使用します。
先程のsample.pyファイルを下記のように修正します。

sample.py
def hello():
  print('Hello!')

# 追加
if __name__ == '__main__':
  hello()

こうすることでsample.pyをimportした際にhello()は実行されなくて済みます。

仕組み

__name__というのはPythonの特殊な変数で、モジュール名の文字列が格納されます。
import helloのようにモジュールが呼ばれることによって__name__'hello'が格納されます。
しかし__name__ == '__main__'が記載されたファイルを直接実行(python hello.py)すると__name__'__main__'という文字列になります。
つまりif '__main__' == '__main__'となり定義元のファイルを実行したときだけ呼び出すということになります。
なのでexample.pypython example.pyで実行した場合、'hello' == '__main__'となり実行されない。

33
38
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
33
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?