こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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__
属性にモジュールの名前が文字列として格納されます。
例として以下のようなモジュールrobotama
(robotama.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__
は、ファイルの読み込み・実行状況によって、次のように変わります。
- moduleとしてファイルをimportすると、
__name__
はファイル名(モジュール名)になる。 - ファイルをコマンドラインからスクリプトとして実行すると、
__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__
に格納される値は次のとおりです。
- 他のファイルからインポートされたとき:
__name__
は'<モジュール名>'
- そのファイル自体が
python
コマンドでスクリプトとして実行されたとき:__name__
は'__main__'
なので、if __name__ == "__main__":
は、Python スクリプトが直接実行された場合にのみ特定のコードが実行されるようにするための条件文です。
他のファイルからインポートされたときは、if __name__ == "__main__":
以降の処理は実行されないということです。
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!