メインのトップレベルスクリプト環境

What is it

__main__ は、トップレベルコードが実行されるスコープの名前です。 モジュールが標準入力、スクリプト、または対話型プロンプトから読み込まれる場合、そのモジュールの名前__main__ に設定されます。

モジュールは、自身の __name__ をチェックすることで、メインスコープで実行されているかどうかを検出でき、これによりモジュール内でコードを条件付きで実行するための一般的なイディオムが可能になります。インポートされたときではなく、スクリプトとして、または python -m で実行された場合にのみ実行されます。

# __name__ == "__main__": スクリプトが直接実行されているか(インポートされていないか)を確認
if __name__ == "__main__":  # スクリプトとして実行された場合に True、インポートされた場合に False
    # スクリプトとして実行された場合にのみ実行
    main()

パッケージの場合、同じ効果は main.py モジュールを含めることで実現でき、このモジュールの内容は、モジュールが -m で実行されたときに実行されます。

例えば、モジュールとして使用されることを意図したスクリプトを開発している場合、次のように記述します。

# 例:関数はインポートできるが、テストコードは直接実行された場合にのみ実行される
def add(a, b):
    return a+b

if __name__ == "__main__":  # ファイルが直接実行された場合にのみ実行され、インポートされた場合には実行されない
    add(3, 5)
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

Python ファイルをスクリプトとして直接実行した場合、__name__ の値は何になりますか?
A. ファイル名
B. "**main**"
C. None
D. True

Advantages

  1. すべての Python モジュールには __name__ が定義されており、これが __main__ の場合、そのモジュールがユーザーによってスタンドアロンで実行されていることを意味し、それに応じて適切なアクションを実行できます。
  2. このスクリプトを別のスクリプトでモジュールとしてインポートすると、名前はスクリプト/モジュールの名前に設定されます。
  3. Python ファイルは、再利用可能なモジュールとしても、スタンドアロンプログラムとしても機能できます。
  4. if __name__ == "__main__": は、ファイルが直接実行された場合にのみコードを実行し、インポートされた場合には実行しないようにするために使用されます。
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

if __name__ == "__main__": を使用する主な目的は何ですか?
A. ファイルが直接実行された場合にのみコードを実行し、インポートされた場合には実行しないこと
B. ファイルがインポートされるのを防ぐこと
C. ファイルの実行速度を速くすること
D. 他のモジュールからコードを隠すこと