概要
Pythonを学習していると__name__ == '__main__'
という謎の構文が出てきて、
それについて調べたのでアウトプットしたいと思います。
使い方
__name__ == '__main__'
は簡単に言うとファイルを読み込んだ際に
関数などの実行を制御してくれるものです。
例えば下記のようなファイルがあるとします。
def hello():
print("Hello!")
hello()
hello()
を別ファイルで使用しようとしたときファイルをimportします。
from sample import hello
hello()
このときexample.py
ファイルを実行するとどうなるか
python example.py // pyファイルの実行コマンド
// => Hello!
Hello!
Hello!
が2度表示されてしまいます。
これはファイルをimportすると読み込み先のファイルに記載されている関数が実行されるためです。
これを制御するためにif __name__ == '__main__':
を使用します。
先程の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.py
をpython example.py
で実行した場合、'hello' == '__main__'
となり実行されない。