【Python】if __name__==’__main__’の意味とアプリ開発での使い方

2020.05.08 /

【Python】if __name__==’__main__’の意味とアプリ開発での使い方

if __name__ == '__main__': は、大規模なプログラムを構築するときには必ず知っておきたい知識です。

プログラムが大きくなれば、1つのファイルにすべてを書いてしまうと可読性が悪くなります。
そのため別のファイル(モジュール)を作成し、1つ1つのモジュールのコードを短くして可読性の向上及びコードを理解しやすくします。

その際、各モジュールにif __name__ == '__main__'を書きます。

IT用語の確認

モジュールとは、関数やクラスを1つに集めたファイルです。簡単に言えば拡張子.pyのPythonで記述されたファイルです。

このif __name__ == '__main__'の意味を知ることでよりプログラム作成の幅が広がります。

それではif __name__ == '__main__'の意味や使い方を学びましょう。

__name__ == '__main__'の意味

__name__にはモジュール名や’__main__’が格納される場合の2種類があります。

__name__にモジュール名が格納されるのは、モジュールがインポートされたときです。

import os
print(os.__name__)
# os

モジュール名.__name__でモジュール名を取得できます。

__name__に‘__main__’が格納されるのは、直接モジュールが実行されたときです。

つまり対象の.pyファイル(モジュール)が直接実行されたときのみ__name__==’__main__’がTrueとなります。

if __name__ == '__main__':の使い方

if文で__name==’__main__’を使うのは、上記で示したように直接実行されたかどうかで判定したいからです。

言い換えると、ほかのファイル(モジュール)からインポートされた場合はFalseとなり、if__name__==’__main__’:以下は実行されないということです

使いどころとしては、モジュールのテストをするとき等です。

モジュールを作成しているとき、すべて関数で定義しているとそのモジュールの単体テストができません。

そのような場合にif __name__==’__main__’:以下にテストしたい関数名を入れることでそのモジュールの単体テストができるのです。

サンプルコード

def test():
	print(‘OFFICE54’)

print(‘Python’)
if __name__==’__main__’:
	test()

上記サンプルコードの場合、直接実行した場合は下記のような結果となる。

Python
OFFICE54

これは直接実行されたので、__name__==’__main__’がTrueとなり、test関数が実行されたからである。

もしこのファイルが別ファイルからインポートされた場合は、Pythonのみが出力される。