.pyファイルを見ているとif __name__ == '__main__':
のという記述を見かけることがあります。
この処理の意味や内容について簡潔にまとめています。
何をしているか?意味・役割は何か?
結論から言うと以下の処理になります。
・ファイルをimportしたときに、if以下は実行しない。
通常、.pyファイルをインポート(import)すると、ファイルの中身が自動的に実行される仕様になっています。
ですが、時にはimportした瞬間に自動で実行されては困るプログラムもあります。そうしたときに
if __name__ == '__main__':
以下に記述することで、import時の実行を回避することができます。
動作原理
変数 __name__
が、importした場合と、ファイル実行した場合で挙動が異なる性質を利用しています。
「__name__」
__name__
の挙動は次のように変化します。
- importした場合: ”モジュール名” に置き換わる。
- ファイルを実行した場合: ”main”に置き換わる。
この性質を利用すると、ファイル実行時のみ、if文の条件がTrueになるので、中身が実行される。
print(__name__)
#出力
__main__
実用例
importでは実行しないが、ファイルの直接実行でのみ処理するプログラムの書き方は次のようになります。
def 関数名:
処理
if __name__ == "__main__":
関数名()
▼実例
def hello():
print("hello world")
if __name__ == "__main__":
hello()
それぞれの実行方法での処理結果は以下のようになります。
①import hello
の場合
- 何も出力しない。
- __name__にモジュール名「”hello”」が代入される
②$python hello.py
の場合
- “hello world”を出力
- __name__に「__main__」が代入される