Pythonの if __name__ == ‘__main__’ の意味と使い方・__name__ とは? ‘__main__’とは?

Python_name_main

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、Pythonのif __name__ == ‘__main__’の意味と使い方についてまとめて解説します。

Pythonの if __name__ == ‘__main__’ の意味と使い方

この記事は、Pythonのif __name__ == ‘__main__’の意味と使い方 の記事を引用・参考しながらまとめました。

__name__ とは?

Pythonでは、モジュールをインポートするとその__name__属性にモジュールの名前が文字列として格納されます。

また、モジュール名は<モジュール名>.__name__で取得することができます。

import math
import pandas as pd
import numpy as np

print(math.__name__)
print(pd.__name__)
print(np.__name__)

## [ 出力結果 ] ##
# math
# pandas
# numpy

自作のモジュールでも同様に、__name__属性にモジュールの名前が文字列として格納されます。

例として以下のようなモジュールrobotamarobotama.py)を作成します。

モジュール内では、__name__を出力する関数を定義しています。

def robotama_func():
    print("My name is ロボ玉")
    print('__name__ is', __name__)
robotama_func()

続いて、自作のrobotamaモジュールを読み込んで、その__name__を出力するpyを作成します。

# importによって、中身がLoadされる => 中身が実行される
import robotama

print('Module Name', robotama.__name__)

ターミナルで、上記の test2.py を実行すると次のようにモジュール名robotamaが出力されます。

python test2.py

## [ 実行結果 ] ##
My name is ロボ玉
__name__ is robotama
Module Name robotama

'__main__'とは?

先述のように、別のファイルからインポートされると__name__にはモジュール名が格納されます。

一方、ファイルをコマンドラインからスクリプトとして実行すると__name__には'__main__'という文字列が格納されます。

つまり、__name__は、ファイルの読み込み・実行状況によって、次のように変わります。

  1. moduleとしてファイルをimportすると、__name__はファイル名(モジュール名)になる。
  2. ファイルをコマンドラインからスクリプトとして実行すると、__name__'__main__'になる。

上記を検証するための事例として、test_moduleというモジュール(test_module.py)を作成します。

def func():
    print('    This is func() in test_module.py')
    print('    __name__ is', __name__)


if __name__ == '__main__':
    print("Start if __name__ == '__main__'")
    print('call func()')
    func()

また、test_moduleを importして使用するtest_main.pyを作成します。

import test_module

print('This is test_main.py')
print('test_module.__name__ is', test_module.__name__)

print('-----------------------')
print('call test_module.func()')

test_module.func()

これでファイルの準備が完了したので、まずは、test_main.pyを実行してみます。

python test_main.py

## [ 実行結果 ] ##
test_main.py 実行中
test_module.__name__ is test_module
-----------------------
call test_module.func()
    This is func() in test_module.py

moduleとしてファイルをimportしているtest_module.py__name__はファイル名(モジュール名)であるtest_moduleになっていることが確認できます。

次にtest_module.pyを実行してみます。

python test_module.py

## [ 実行結果 ] ##
Start if __name__ == '__main__'
call func()
    This is func() in test_module.py
    __name__ is __main__

今度は、test_module.pyファイルをコマンドラインからスクリプトとして実行しているので、

__name__'__main__'になっていることが確認できました。

if __name__ == '__main__'の意味

まとめると、__name__に格納される値は次のとおりです。

  1. 他のファイルからインポートされたとき: __name__は '<モジュール名>'
  2. そのファイル自体がpythonコマンドでスクリプトとして実行されたとき: __name__'__main__'

なので、if __name__ == "__main__": は、Python スクリプトが直接実行された場合にのみ特定のコードが実行されるようにするための条件文です。

他のファイルからインポートされたときは、if __name__ == "__main__":以降の処理は実行されないということです。

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

Python関係書籍

プログラミング学習・エンジニア転職関連の情報

自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)

『GEEK JOBキャンプ』スピード転職コース(無料)

【IT道場】入校時0円! 就職目的プログラミングスクール

エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】

『techgym』 (Python特化・無料)

参考・引用

  1. Pythonのif __name__ == ‘__main__’の意味と使い方

最近の投稿