Pythonのif __name__ == “__main__” とは

はじめに

  というコードをよく目にすると思います。初学者の方は「はて?これはなんだろう?」と思われるかもしれません。 単純に見ると、name関数とmain関数が同じであれば以下のインテンドされたコードを実行する。 ということなのですが、実際に例文を作って学んでみましょう。

というhi.pyというコードを作成して、実行してみましょう

という結果が返ると思います。これは特段問題がないと思います。 importしたときに処理が実行されると困る 次にPythonを起動してこのhi.pyをインポートしてみましょう。  

  あ!Hi.pyをインポートしたいだけなのにmain() => print(“Hello”) と処理が実行されてしまいます。 単にPythonファイルをインポートして、main関数を再利用しようとしただけなのに実行まで勝手にされてしまうのは困りますよね。そこでif __name__ == “__main__”: というif文は必要になります。先程のhi.pyに二行追加して以下の通りにして保存してください。

この状態でpyhonから再度インポートしてみましょう。  

 

if __name__ == “__main__”を追加するとインポートで実行されないわけ

Pythonには __name__ という特殊な変数があり、この変数には、このPythonファイルのモジュール名が文字列で入っています。 import hi とすると、 hi.py 内部での __name__ は “HI!” になります。これは自動的な処理です。 hi.py を実行した場合、 hi.py の内部の __name__ 変数は “__main__” という文字列になります。 この “__main__” という文字列はPythonファイルをスクリプトとして直接実行した場合に自動で設定されます。 import hiでは、hi.py の内部で __name__ は “Hi!” という文字列になります。 python hello.pyでは、hello.py 内部で __name__ は “__main__” という文字列になります。 したがって、 if __name__ == “__main__” という if文を使えば、「この hi.py は python hi.py のように実行されたと判断されます。  

まとめ

if __name__ == “__main__”文は、作成したコードがインポートされた際に使う側から見れば必要のないコードを実行させないようにすることができるということです。