概要
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__'となり実行されない。