ホームページ > バックエンド開発 > Python チュートリアル > Python の `if __name__ == '__main__':` ステートメントは何をするのでしょうか?

Python の `if __name__ == '__main__':` ステートメントは何をするのでしょうか?

Barbara Streisand
リリース: 2025-01-01 14:53:14
オリジナル
843 人が閲覧しました

What does Python's `if __name__ ==

if __name__ == "__main__": do?

__name__ ガードはユーザーを保護する一般的な Python のイディオムです意図しないときに誤ってスクリプトを呼び出すことがなくなります。このガードを省略すると、スクリプトを別のスクリプトにインポートするか、pickle としてシリアル化する場合に、予期しない動作が発生する可能性があります。

仕組み

インタプリタが読み取ったときソース ファイルの場合、次の 2 つのことを行います:

  • 次のような特殊変数を設定します。 __name__
  • ファイルにあるコードを実行します

モジュールをメイン プログラムとして実行する場合、__name__ は "__main__" に設定されます。それ以外の場合、モジュールをインポートすると、__name__ がモジュールの名前に設定されます。

__name__ ガードは次のように機能します:

  • If __name__ == '__main__' (mainプログラム):

    • ガード本体内のコードを実行します (通常は関数).
  • If __name__ != '__main__' (インポートされたモジュール):

    • ガード内のコードをスキップしますbody.

コードサンプル

次のコードを調べてみましょう:

print("before import")
import math

print("before function_a")
def function_a():
    print("Function A")

print("before function_b")
def function_b():
    print("Function B {}".format(math.sqrt(100)))

print("before __name__ guard")
if __name__ == '__main__':
    function_a()
    function_b()
print("after __name__ guard")
ログイン後にコピー
  • インポート: 数学はインポートされません
  • メイン プログラム: コードがメイン プログラムとして実行される場合、__name__ ガード内に「関数 A」と「関数 B 10.0」が出力されます。 .
  • インポートされたモジュール: コードが通常のモジュールとしてインポートされる場合、ガードはスキップされ、関数は

使用理由

このイディオムを使用すると、独立したモジュールとしても使用できる .py ファイルを作成できます。そしてメインプログラムとして実行されるスクリプトとして。その有用性の例:

  • デモ モード付きライブラリ: 単体テストまたはデモの実行用のスクリプト モードを備えたライブラリ。
  • 単体テスト: テスト フレームワークは .py ファイルをモジュールとしてインポートする場合があり、スクリプトを防ぐために __name__ ガードが必要です
  • API 公開: 独立したプログラムとして実行しながら、上級ユーザーに API を提供するモジュール。
  • 汎用性の高いコード: エレガントですモジュールをインポートすることでスクリプトを実行します。__name__ ガードはこれを容易にします。 this.

要約すると、if __name__ == '__main__' ガードは省略できますが、汎用性、エラー保護、およびコードのインポートまたはシリアル化時の予期しない動作を防ぐために推奨されます。

以上がPython の `if __name__ == '__main__':` ステートメントは何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート