【第11回PYTHON講座】『if __name__ == “__main__”』を理解する

スポンサーリンク
PYTHON

PYTHONのプログラムでif __name__ == “__main__”を見かけます。

これは一体どういう役割なのかを説明しますね。

スポンサーリンク

__name__は関数が収められるグローバル変数である

PYTHONの正式ホームページには下記の説明がされています。

__main__‘ はトップレベルのコードが実行されるスコープの名前です。モジュールが、標準入力から読み込まれたとき、スクリプトとして実行されたとき、あるいはインタラクティブプロンプトのとき、__name__ には ‘__main__‘ が設定されます。
簡単に言うと、__name__動作しているモジュール(関数)名を収められるグローバル変数ということなのですが、イメージが付きにくいので、実際にコードで試してみます。

test01.pyというファイルを作り、下記の1行を書いて実行します。

print(__name__)
#test01.pyの実行結果
__main__ 

__name__の中に__main__が格納されているという事が解ります。

2つのファイル使って『__name__』の確認

次に__name__の中に__main__以外の値が格納されることを確認してみます。

2つのファイルtest01.pytest02.pyを作成し、各々に下記のコードを書いてみます。

print(f"test01.pyでのprint結果は:{__name__}")
print("test01のインポート前")
import test01
print("test01のインポート後")
print(f"test02.pyでのprint結果は:{__name__}")

test01.pyを実行すると__main__が出力されますが、test02.pyを実行すると下記が出力されます。

test01のインポート前
test01.pyでのprint結果は:test01
test01のインポート後
test02.pyでのprint結果は:__main__

test01をインポートする時に、test01のプログラムが実行され、__name__にモジュール名test01が格納され、インポート後にtest02に戻ってくるので、__name____main__が格納されます。

つまり、実行されるモジュールの名前が__name__に格納されることになります。2つのプログラムがある場合、呼び出す側でプログラムが実行されれば__main__になり、呼び出される側でプログラムが実行されると、そのモジュール名が格納されます。

『if __name__ == “__main__”』を使って理解を深める

実際に『if __name__ == “__main__”』を使ってより理解を深めましょう。

test01.pyを下記の通り書き直します。

def func01():
    print(f"test01.pyでのprint結果は>>>{__name__}")

if __name__ == '__main__':
    func01()

test01.pyを実行すると、下記の通りになります。test01.pyを実行したので、条件if __name__ == ‘__main__’:が実行されています。

test01.pyでのprint結果は>>>__main__

次にtest02.pyを下記の通り書き直します。

import test01
print(f"test02.pyでのprint結果は>>>{__name__}")

test02.pyを実行すると、下記の通りになります

test02.pyでのprint結果は>>>__main__

test01をインポートしてもfunc01は実行されていないことが解ります。つまり、test02の『if __name__ == ‘__main__’:』の条件文は、test02からのみ実行可能となるからです。

『if __name__ == ‘__main__’:』で宣言する内容は、そのモジュール自体で動かしたいプログラムで、他のモジュールから呼び出された時には実行しないプログラムになります。

まとめ

いかがだったでしょうか。

少し理解しにくかったかもしれませんが、『if __name__ == “__main__”』でプログラムを書いていくようにすれば、色々と利便性が理解できるようになってくると思うので安心して下さいね。

コメント

Social Media Auto Publish Powered By : XYZScripts.com
タイトルとURLをコピーしました