Python

【pythonの基礎の基礎の基礎】なぜ__name__ == "__main__"をするか

More than 3 years have passed since last update.
sample.py
import ~~
def hoge
    #~~
if __name__ = "__main__": 
    #~~

こういうコードをみるけど、__name__ってなんなのっていう話。

pythonインタープリターがコードを実行する前に定義する特別な変数がいくつかあり、そのうちの一つが__name__変数である。そして、読んでいるモジュールすなわちソースコードがメインプログラムだった場合、pythonは__name__変数に値"__main__"をセットする。もし、ファイルが他のモジュールからインポートされている場合は、__name__には、そのモジュール名が入る。

つまり、コンソールで、

python sample.py

とかしてるときは、メインプログラムとして走らせてるsample.py内では__name__変数に__main__がセットされているということ。

上のsample.pyでいうと、こういう特殊な最初に定義される変数をセットしてから、次にimport宣言たちを実行して、その次にdefブロックを評価してhogehoeっていうfunction objectを参照する変数をつくる。それからif文を見に行き、その中の処理を実行する。
この手順によって、定義した関数とかインポートしたモジュールをもってしてif内の処理を実行できる。

これを持つ意味は、他のモジュールからインポートされた際には実行されたくないけど、メインプログラムとして走らせたときには行い処理をかけるね。C++とかjavaのmain関数の考えかたと一緒ってことかな。

なるほど。