__name__ == __main__とは|Pythonのお勉強

Pythonで見かける以下のようなコードについてです。

def main():
    pass

if __name__ == '__main__':
    main()

メインのスクリプトから呼び出されるモジュールに記載するおまじないだそうです。私なりにどのようなカラクリか説明します。(他言語かじりのPythonデビューな私にはちょっと異様なコードに感じました)

呼び出される側のモジュールに以下を記載したとします。

# Name of this module is ykHello.py
# This module will be called by ykMain.py
def ykHello(arg=None):
    print("Bonjour!!")

print("Bon Voyage!!")

関数内の「Bonjour」と外の「Bon Voyage」があります。

次にメインのスクリプト(呼び出す側)の内容を以下とします。

# This script imports ykHello.py
import ykHello

# Run a function in ykHello.py
#ykHello.ykHello()

一番下のykHello()という関数が「呼び出される側」のモジュールの中に見覚えがありますが、コメントアウトしています。つまり、モジュールのインポートしかしていない状況です。

この状況でメインスクリプトを実行すると以下のような結果となります。

*** Remote Interpreter Reinitialized ***
Bon Voyage!!
>>> 

このように、インポートしただけでモジュール内の関数が実行されてしまいます。インポートしただけで勝手に実行されると困りますね。

これを防ぐのが、このおまじないです。

よっさん
  • よっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後某日系IT企業でグローバル案件に携わる。マレーシアに1.5年赴任した経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です