【Python】モジュールの if __name__ == ‘__main__’: の意味・使い方

スポンサーリンク

Pythonのモジュールで使われる「if __name__ == ‘__main__’:」の意味と使い方を解説します。

モジュールでよく見かける 「if __name__ == ‘__main__’:」って何でしょうか?ないとダメ?

今回は、Pythonのモジュールで使われる「if __name__ == ‘__main__’:」の意味と使い方を解説します。

if __name__ == ‘__main__’: の意味

Pythonのモジュール

Pythonの「モジュール」は「〇〇.py」というファイルのことです。このモジュールにクラスが複数定義されたり、メソッドが複数定義されます。

モジュールの中でよく見かける記述に、「if __name__ == ‘__main__’」があります。

if文ですが、「__name__ == ‘__main__’」って何でしょうか?

if __name__ == ‘__main__’ とは

「if __name__ == ‘__main__’」はモジュールが直接実行されたときに実行されます。

どういうことかというと、Pythonのモジュールを実行しようと思ったら、

  1. モジュールをimportして使う
  2. モジュールを直接実行する

の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__’」の使い方でした。

コメント