この記事では、Pythonの__name__とエントリーポイントについて解説します。
__name__
は、全てのモジュールに定義されている属性の一つです。__name__
といえば以下のようなコードを見たことがあると思います。
if __name__ == '__main__':
# 何かしらの処理
上記コードは一体何をしていたのでしょうか?
それでは、__name__
ついて学んでいきましょう!
__name__とは?
__name__
とは、モジュールに定義されている属性の1つです。全てのモジュールに共通で用意されており、モジュールが実行される前に値がセットされます。
__name__
には、モジュールの名前が文字列型で格納されており、基本的にモジュールをインポートする際にモジュール名を識別するのに使われます。
Link__name__ - インポートシステム — Python 3.9.4 ドキュメント
__name__の値
__name__
属性には、モジュール名が完全修飾名で格納されています。
import sys
import random
print(sys.__name__)
print(random.__name__)
実行結果
sys
random
ただし、例外としてトップレベルで実行した(Pythonコマンドを使って実行した)モジュールの__name__
には'__main__'
が格納されています。
ターミナルまたはコマンドプロンプト
Python モジュール名.py
上記のように呼び出されたモジュール内で__name__
を呼び出すと以下のように'__main__'
が返される。
print(__name__)
実行結果
__main__
if __name__ == '__main__':
ということは以下のようなコードは、そのモジュールがトップレベルで実行された場合の処理を記述していた! ということになります。
if __name__ == '__main__':
# 何かしらの処理
例えば以下のように__name__
が__main__
かどうか判定しない場合、そのモジュールをインポートするだけでprint()
が処理されてしまう。
test.py
print('test.pyが実行された')
試しに他のモジュールからtest.py
をインポートしてみます。
main.py
import test
実行結果
test.pyが実行された
しかし、以下のように__name__
を__main__
かどうか調べることでトップレベルで実行された際にのみ処理させることができます。
test.py
if __name__ == '__main__':
print('test.pyが実行された')
こうすることでインポートしても実行させなくようにできます。
import test
実行結果
まとめ
この記事では、Pythonの__name__について解説しました。
__name__
には、
- モジュール名(完全修飾名)
- トップレベルで実行された場合は
__main__
が格納されているのがわかりました!
利用方法としては__main__
が格納されているか判定してトップレベルで実行された場合の処理を記述することができます。
if __name__ == '__main__':
# 何かしらの処理
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ