LoginSignup
169
116

More than 3 years have passed since last update.

pythonの if __name__ == '__main__':は何のためにあるのか。

Last updated at Posted at 2020-11-27

pythonの if name == ‘main’:は何のためにあるのか。

一言で言うと、if name == ‘main’:はこのpythonファイルが「pythonファイル名.py」と言うふう実行されているかどうか」を判定するif文。

以下の hello.py という if name == 'main'のないPythonファイル を先に見ていきましょう。

def main():
    print("Hello")

main()

この hello.py のように if name == "main" 無しでも、 python hello.py とすることで「Hello」と表示するPythonファイルは作れます。

$ python hello.py
Hello

ですがこの hello.py の場合、外部から import hello と hello.py をインポートした際にも 「Hello」と表示されてしまいます

import hello #この時点で「Hello」が表示されてしまう
Hello

pythonでは、インポートされたファイルの中身は実行される。ですので単にインポートしただけなのに、main() => print(“hello”)と処理が実行されてしまう。

インポートされた際に、プログラムが動かないようにするために、以下のようにif name == “main”:というif文を書く。

def main():
    print("Hello")

if __name__ == "__main__":
    main()

このif文の内部は import された際には実行されません。

import hello

インポートで実行されない理由

pythonには、name という特殊な変数がある。
この変数には、このpythonファイルのモジュール名が文字列で入っている。
import hello とされた場合、hello.py内部での name は、”hello”になる。(pythonにより自動的にこの変数は入れられる)
python hello.py のようにプログラムを実行した場合、 hello.py の内部の name 変数は "main" という文字列になります。 この "main" という文字列はPythonファイルをスクリプトとして直接実行した場合に自動で設定されます。

  • import hello した:hello.py 内部で name は "hello" という文字列になる
  • python hello.py した:hello.py 内部で name は "main" という文字列になる

if name == "main" という if文を使うことで、「この hello.py は python hello.py のように実行された(== importされたことで動作したのではない)」と判定できます。

if __name__ == '__main__':
    ...
169
116
10

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
169
116