【Python】if __name__ == ‘__main__’の意味
こんにちは、にわこまです。
今回はpythonのコードでよく見かける「if __name__ == ‘__main__’」について紹介します。「なんとなく書いていたけど、実際どんな意味なの?」という疑問に答えていきます。
誤字脱字など何かございましたら、ご連絡お願い致します。TwitterのDMでも承ります。
スポンサードサーチ
結論
「if __name__ == ‘__main__’」と書かれたPythonファイルが「python ファイル名.py」というコマンドで実行されたかを判定するif文です。
「python ファイル名.py」で実行されれば、そのif文以降を実行します。
「python ファイル名.py」で実行されなければ、そのif文以降を実行しません。つまり、モジュールとしてインポートされた場合は、そのif文以降は実行されません。
「if __name__ == ‘__main__’」にpythonの仕様としての意味はありません。大きなプログラムである場合は関数「main()」を定義して、その関数を「if __name__ == ‘__main__’」がTrueである場合に実行することが多いです。
if __name__ == '__main__':
main()
解説
「if __name__ == ‘__main__’」をそのまま説明すると、変数「__name__」に文字列「__main__」が代入されているときをTrue、そうでないときをFalseと判定します。
では「__name__」とはなにか?
「__name__」は特殊な変数であり、「python ファイル名.py」またはモジュールとしてインポートしたときに、文字列が代入されます。
実際にコードを書いてみます。「python ファイル名.py」で実行する場合
# 「python ファイル名.py」で実行する場合
def func():
print("Hello World!")
print("__name__ = ", __name__)
if __name__ == '__main__':
func()
# 実行結果
Hello World!
__name__ = __main__
「python test.py」でファイルを実行したため、変数「__name__」に文字列「__main__」が代入されています。
上記の「test.py」をインポートした、実際のコードを書いてみます。モジュールとしてインポートした場合
# モジュールとしてインポートする場合
import test
test.func()
# 実行結果
Hello World!
__name__ = test
インポートしたため、変数「__name__」にモジュール名が代入されています。
使いどころ
モジュールとして作成したコードの確認やそのファイルの関数を使う場合に使われます。
モジュールとして作成されているコードの関数を「if __name__ == ‘__main__’」を使わずに確認を行えば、インポートしたタイミングでもそのファイルでその関数が実行されてしまいます。
# 「if _name__ == '__main__':」を使わずに関数を実行
import os
def func(filename):
print("ファイル名 = ", os.path.basename(filename))
print("__name__ = ", __name__)
print("")
func(__file__)
# 実行結果
ファイル名 = test3.py
__name__ = __main__
# 「if __name__ == '__main__':」を
# 使ってないファイルをインポート
import test3
test3.func(__file__)
# 実行結果
ファイル名 = test3.py
__name__ = test3
ファイル名 = test4.py
__name__ = test3
スポンサードサーチ
まとめ
今回は、pythonの「if __name__ == ‘__main__’:」について紹介しました。
「if __name__ == ‘__main__’:」は、そのファイルが「python ファイル名.py」で実行されているかを判定するためのif文です。
「python ファイル名.py」で実行された場合は、「if __name__ == ‘__main__’:」以降が実行されます。
インポートされた場合は、「if __name__ == ‘__main__’:」以降は実行されません。
モジュールとして使用するファイルの関数は、「if __name__ == ‘__main__’:」を使って確認しましょう。
最後までお読み頂きありがとうございます。
スポンサードサーチ