Pythonで if __name__ == ‘__main__’: について。
この記事の内容はコチラです
- if __name__ == ‘__main__’:の意味は?
- if __name__ == ‘__main__’: の使い方
モジュールでよく見かける 「if __name__ == ‘__main__’:」って何でしょうか?ないとダメなのでしょうか?
今回は、Pythonのモジュールで使われる「if __name__ == ‘__main__’:」の意味と使い方を解説します。
if __name__ == ‘__main__’: の意味
Pythonのモジュールで使われる「if __name__ == ‘__main__’:」の意味と使い方を解説します。
Pythonのモジュール
Pythonの「モジュール」は「〇〇.py」というファイルのことです。このモジュールにクラスが複数定義されたり、メソッドが複数定義されます。
モジュールの中でよく見かける記述に、「if __name__ == ‘__main__’」があります。
if文ですが、「__name__ == ‘__main__’」って何でしょうか?
if __name__ == ‘__main__’ とは
「if __name__ == ‘__main__’」はモジュールが直接実行されたときに実行されます。
どういうことかというと、Pythonのモジュールを実行しようと思ったら、
- モジュールをimportして使う
- モジュールを直接実行する
の2択です。
「モジュールを直接実行する」ときに、「if __name__ == ‘__main__’」の中に記述した処理を実行します。
実際にモジュールを動かして「if __name__ == ‘__main__’」の動きを確認してみます。
if __name__ == ‘__main__’: の使い方
サンプルモジュール
# test.py def defA(): print('defA') def defB(): print('defB') if __name__ == '__main__': defB()
モジュール「test.py」の中に「defA」「defB」を2つ定義しました。「if __name__ == ‘__main__’」は「defB」を実行しますが、これはまた後述します。
モジュールをimportして使う
この「test.py」をimportして使います。
import test test.defA(): #[結果] defA test.defA(): #[結果] defB
このモジュールをimportして「defA」「defB」を実行しましたが、ふつうに実行できます。「if __name__ == ‘__main__’」は関係ないですね。
このように、importして使う分には「if __name__ == ‘__main__’」は特に関係ありません。
モジュールを直接実行する
次に、モジュールを直接実行してみましょう!
モジュール「test.py」はimport以外に、直接実行できます。Windowsの場合はコマンドプロンプトでモジュールを直接実行できます。
# コマンドプロンプトで実行 python c:\pg\test.py #[結果] defB
コマンドプロンプトに「python モジュールのパス」を入力して実行します。
結果を見ると、「defB」が返されました。なぜ「defB」が返されたかというと、「if __name__ == ‘__main__’」が実行されたからです。
「if __name__ == ‘__main__’」はこのようにモジュールが直接実行されたときだけ動作します。
importしても関係ありませんが、直接モジュールを実行すると、「if __name__ == ‘__main__’」の中の処理が実行されます。
if __name__ == ‘__main__’ がない場合
# test.py def defA(): print('defA') def defB(): print('defB') #if __name__ == '__main__': # defB()
「test.py」モジュールの「if __name__ == ‘__main__’」をコメント化して、存在しない状態にしました。これで「test.py」モジュールを実行するとどうなるか?
# コマンドプロンプトで実行 python c:\pg\test.py #[結果]
結果は何も返されませんでした。
# test.py def defA(): print('defA') def defB(): print('defB') defB()
「if __name__ == ‘__main__’」を使わず、「defB()」を書きました。これでどうなるか?
# コマンドプロンプトで実行 python c:\pg\test.py #[結果] defB
結果、「defB」が実行されました。
モジュールが直接実行されたときの処理として「if __name__ == ‘__main__’」の使い方をいくつか取り挙げてみました。
以上、Pythonの「if __name__ == ‘__main__’」の使い方でした。
コメント
import test
test.defA():
#[結果] defA
test.defA():
#[結果] defB
についてですが、
: があるとエラーになるので
取って実行しました。
6行目は test.defB():
に変更して#[結果] defB
が表示されました。
import test
test.defA()
#[結果] defA
test.defB()
#[結果] defB