【Python】「if __name__ == ‘__main__’:」の意味は?

プログラミングのKnow-howを共有しましょう

【Python】「if __name__ == ‘__main__’:」の意味は?

スポンサーリンク

Pythonのソースを見るとよく「if __name__ == ‘__main__’:」という記述があります。これは一体どういう意味なのかを書いていきます。

規模の大きいPythonのソースを見ると、下の方には必ず「if __name__ == ‘__main__’:」という記述があります。”main”という部分を見ると、C言語を習得している方ならどういうものなのか想像つくかもしれませんね。

if __name__ == ‘__main__’:の意味は?

まずは以下のソースをご覧ください。

1~2行目で足し算の関数を定義し、4~6行目で「if __name__ == ‘__main__’:」を使用し、その内部で関数を呼び出しています。プログラムの結果は「answer : 8」と表示されます。

関数とは、呼び出されて初めて処理を行うものですよね?
変数とは、宣言されてた初めて値が代入されるものですよね?

5行目で「add関数」を呼び出しているので足し算が行われて変数numに代入されるのはわかると思います。しかし、「add関数」の呼び出し元であるif文「if __name__ == ‘__main__’:」の「__name__」はプログラムソース上一度も定義しておりません。処理されているということは__name__と’__main’__を比較しているif文は「true」を返しているということです。

一体、この「__name__」とは何でしょうか?

__name__とは何?

実はこの変数、自動的に定義されるものなのです。

Pythonのソースは、実行された時に、「__name__ = ‘__main__’」と定義されます。

ただし、全ての場合で自動的に定義される訳ではありません。直接実行されたソース内でのみ自動で定義されます。

例えば

「main.py」と「sub.py」という二つのソースファイルがあり、どちらにも「if __name__ == ‘__main__’:」が記述されているとします。「main.py」の中で「sub.py」をインポートします。以下のようなソースになります。

ここで「main.py」を実行すると・・・

“これはmainです。”

という一文のみ表示されます。sub.pyをインポートしているにも関わらず、sub.pyの「if __name__ == ‘__main__’:」の部分は実行されていませんね?sub.pyは直接実行されていないので__name__が定義されていないからです。

結論

「if __name__ == ‘__main__’」はif文、そして「__name__」は直接実行されたソース内でのみ定義される。
つまりこの1文が意味するのは

ソースが直接実行されたら中身を実行し、間接的に呼び出されたら無視する
結果として、C言語のメイン関数のような動きをする

ということです。

「「if __name__ == ‘__main__’:」の意味は?」については以上です。
よろしければ他のノウハウも見ていってください。