Learn or Die

生涯勉強。Macです。

if __name__ == ‘__main__' : ってなに?

if __name__ == ‘__main__' :が書かれたPythonファイルが、importされているだけなのか、それともファイル自体が実行されているのかを判断するための条件式。

たとえば、以下のような関数が書かれたファイル(hello.py)があったとする。

def hello():
    print("Hello")

hello()

この場合、ターミナルで以下を実行するとHelloと出力されます。

$ python hello.py
Hello

しかし、別のファイルでhello.pyをimportした場合、関数を実行すると"Hello"が2回出力されてしまいます。
これはhello.pyのhello()の箇所も実行してしまうためです。

from hello import hello

hello()

# 出力
# Hello
# Hello

これを防ぐためにif __name__ == ‘__main__' :を使います。
__name__ にはモジュール名(今回でいうhello)が入っています。
__main__は、importでなくファイルが直接実行された場合のみ代入されます。(条件式がtrueになる)
これにより、importで呼び出された場合は条件式がfalseとなり、Helloが2回出力されることはありません。

def hello():
    print("Hello")

if  __name__ == ‘__main__' : 
 hello()