Python メイン関数とメソッド: def Main() を理解する

⚡ スマートサマリー

Python main関数は、インタープリタがプログラムの実行を開始する開始点を示します。def main()で定義され、if __name__ == “__main__”ガードと組み合わせることで、再利用可能なモジュールコードとスタンドアロンのスクリプト実行を分離します。

  • 🚀 エントリーポイント: main関数は実行開始位置を定義するため、読者は明確な開始点からプログラムの流れを追跡できる。
  • 🧩 def main():: ラップping def main() 内のロジックは、セットアップと実行を関数およびクラスの定義から分離します。
  • 🔒 __name__ ガード: if __name__ == “__main__” のチェックは、直接実行時にのみ main() を実行し、インポート時には実行しません。
  • 🔁 再利用可能なモジュール: ガード付きコードを使用すると、他のスクリプトがプログラム全体をトリガーすることなく、あなたの関数をインポートできます。
  • 特選割️ コマンドライン入力: main() 関数は、sys.argv 引数を読み込み、終了ステータスを返すのに最適な場所です。
  • 🤖 AI支援: GitHub Copilot などの AI アシスタントは、短いプロンプトから main() の定型文と __name__ ガードを生成します。

Python 主な機能

何ですか Python 主な機能?

その Python メイン機能 はあらゆるプログラムの開始点です。プログラムが実行されると、 Python インタプリタはコードを順次実行します。メイン関数は、として実行されたときにのみ実行されます。 Python プログラム。モジュールとしてインポートされた場合、メイン関数は実行されません。

def main()関数とは何ですか? Pythonこれを理解するには、コアの一部である以下のサンプルコードを検討してください。 Python プログラミング 基本:

def main() 例 1

def main():
     print ("Hello World!")
print ("Guru99")

Python 主な機能

ここでは、2 つの出力が得られました。1 つはメイン関数内で定義されている「Hello World!」で、もう 1 つは独立したもので、Guru99」。関数 def main (): を実行すると、

  • それだけ "Guru99インチのプリントアウト
  • コード「Hello World!」ではありません。

呼び出しを宣言していないためです 関数「if__name__==「__main__」。

メイン関数を定義した後、if__name__== “__main__” でコードを呼び出し、コードを実行することが重要です。そうすることで、プログラミングコンソールに “hello world!” という出力が表示されます。次のコードを検討してください。

def main() 例 2

def main():
    print("Hello World!")

if __name__ == "__main__":
    main()

print("Guru99")

Guruこの場合は99と印字されます。

Python 主な機能

ここに説明があります、

  •    Python インタプリタはソースファイルを読み取ると、そこにあるすべてのコードを実行します。
  •    Python 「ソースファイル」をメインプログラムとして実行し、特殊変数 (__name__) に値 (「__main__」) を設定します。
  • Python で main 関数を実行すると、「if」ステートメントが読み取られ、__name__ が __main__ と等しいかどうかがチェックされます。
  • In Python 「if__name__== “__main__” 実行することができます Python ファイルは 再利用可能なモジュールまたはスタンドアロン プログラム。

main() 関数を使用する理由 Python?

Python 必ずしもmain関数を記述する必要はありませんが、経験豊富な開発者は、ほとんどすべての重要なスクリプトでmain関数を使用します。def main()パターンはファイルに秩序をもたらし、コードの再利用性を高めます。このパターンを使用する主な理由は以下のとおりです。

  • 明確な入り口: main()関数は、プログラムがどこから始まるかを読者に正確に示すため、ロジックを容易に理解できます。
  • 再利用可能なモジュール: Code if __name__ == “__main__” によって保護されているため、直接実行時のみに実行されるため、他のファイルは副作用なしに関数をインポートできます。
  • ローカル範囲: main() 関数内で作成された変数はローカル変数として保持されるため、モジュール内の他の場所にあるグローバル変数名との意図しない衝突を回避できます。
  • より簡単なテスト: main() 関数内でロジックを分離することで、テストスイートがそれを直接呼び出して結果を確認できるようになります。
  • 共通の慣習: main()関数は、プログラムのエントリポイントを示す広く認知された指標であり、チーム間の保守性を向上させます。

つまり、main() 関数はオプションです Pythonしかし、これにより大規模なプログラムの可読性、テスト容易性、およびインポートの安全性が維持されます。

__name__変数と Python モジュール

__name__変数の重要性を理解するには Python main 関数メソッドについては、次のコードを考えてみましょう。

def main():
    print("hello world!")

if __name__ == "__main__":
    main()

print("Guru99")

print("Value in built variable name is:  ",__name__)

__name__変数と Python モジュール

ここで、コードがモジュールとしてインポートされることを考えてみましょう。

import MainFunction

print("done")

__name__変数と Python モジュール

コードの説明は次のとおりです。 Cのように、 Python 比較には == を使用し、代入には = を使用します。 Python インタプリタはmain関数を2つの方法で使用します

直接実行:

  • __名前__=__メイン__
  • if ステートメント == True の場合、_main_ 内のスクリプトが実行されます

モジュールとしてインポートする

  • __name__= モジュールのファイル名
  • if ステートメント == false、__main__ のスクリプトは実行されません

コードが実行されると、「if」を含むモジュール名がチェックされます。 このメカニズムにより、main 関数はモジュールとしてインポートされた場合ではなく、直接実行としてのみ実行されることが保証されます。

上記の例は Python 3つのコードを使用する場合 Python 2、次のコードを検討してください

def main():
  print "Hello World!"
  
if __name__== "__main__":
  main()

print "Guru99"

In Python 3、if__nameを使用する必要はありません。次のコードも機能します

def main():
  print("Hello World!")
  
main()
print("Guru99")

注意: main 関数を定義した後は、必ずインデントを残し、def main(): 関数のすぐ下にコードを宣言しないようにしてください。そうしないと、インデント エラーが発生します。

コマンドライン引数を渡す方法 Python main() 関数

main() 関数は、ユーザーがコマンドラインで渡す入力を処理するのに最適な場所です。 Python これらの値は、標準の sys モジュールが提供する sys.argv リストに格納されます。最初の項目である sys.argv[0] はスクリプト名であり、それ以降の値はユーザーが指定した引数です。

次の例は、main() 関数内からコマンドライン引数を読み込んで出力するものです。

import sys

def main():
    print("Script name:", sys.argv[0])
    print("Arguments passed:", sys.argv[1:])

if __name__ == "__main__":
    main()

ファイルをscript.pyとして保存して実行すると python script.py アルファ ベータプログラムはスクリプト名とリスト['alpha', 'beta']を出力します。これらの値はmain()関数内で渡されるため、ロジックは整理されたままでテストも容易です。

コマンドライン入力を扱う際の、いくつかの実用的なヒントをご紹介します。

  • スクリプト名を切り取ります。 sys.argv[1:] を使用すると、ユーザーが入力した引数のみを読み取ることができます。
  • 本格的なツールにはargparseを使用してください。 組み込みのargparseモジュールは、sys.argvを手動で読み込むよりもはるかに安全に、フラグ、オプション、ヘルプテキストを解析します。
  • 終了コードを返す: main() の戻り値がプロセスの終了ステータスになるように、呼び出しを sys.exit(main()) でラップします。
  • 早期に検証する: プログラムの残りの部分を実行する前に、main() 関数の先頭で引数の数と型を確認してください。

このパターンは、シンプルなスクリプトを信頼性の高いコマンドラインツールに変えながら、ping 単一のテスト可能な main() 関数内のすべてのステップ。

Python main()関数と他のプログラミング言語との比較

C言語出身の開発者、 C++または Java 多くの場合、必須の main() 関数が期待されます。 Python これはインタプリタ言語であるため動作が異なり、インタプリタは単にファイルの先頭行から末尾までを実行します。 Python したがって、それは規則というよりは慣習である。

  • C, C++、C#、および Java: main()関数は必須のエントリポイントです。ランタイムが自動的に呼び出し、プログラムごとに1つしか存在できません。
  • Python: main() 関数は不要です。実行はファイルの最初の行から始まり、def main() はコード内で呼び出された場合にのみ実行されます。
  • 警備員: if __name__ == “__main__” ブロックは Python コンパイルされた main() と同様の目的で、ファイルがメインプログラムの場合にのみ実行されるべきコードをマークします。

他の言語では main() エントリ ポイントが強制されるが、 Python 選択はユーザーに委ねられており、コンパイラの規則ではなく慣習を通して同様の明確さを提供しています。

よくあるご質問

__main__ は名前です Python __name__ 変数で検出された最上位のスクリプトを返します。main() は、プログラムロジックを保持する通常のユーザー定義関数です。これらは連携して動作しますが、__main__ は環境名であり、main() は関数です。

最後に配置することで Python このブロックが main() を呼び出す前に、上記のすべての関数とクラスが既に定義されています。それより前に実行すると、まだ定義されていない名前を参照し、NameError が発生する可能性があります。

いいえ。 Python mainという名前には特別な意味はありません。エントリ関数には好きな名前を付けることができますが、main()という名前を付けるのは、他の開発者にプログラムの開始点を示すための強力な慣例です。

はい。main() 関数は値を返すことができ、一般的なパターンとして sys.exit(main()) と記述することで、返された値がプロセスの終了コードになります。0 を返すと成功、0 以外の値を返すとエラーを示します。

ガードがない場合、main() 関数はファイルが直接実行された場合とインポートされた場合の両方で実行されます。その関数を再利用したいだけの他のプログラムが、意図しない実行や副作用を引き起こす可能性があります。

main() の本体は def main(): の行の下にインデントする必要があります。次のステートメントを左揃えで書くと、関数にインデントされたブロックが残らないため、 Python IndentationError が発生します。一貫したスペースまたはタブを追加してください。

GitHub Copilotは、短いコメントから`def main()`のスケルトンと`if __name__ == “__main__”`ガードを自動補完します。また、引数の解析やドキュメント文字列も提案してくれるので、定型コードではなくプログラムロジックに集中できます。

AIや機械学習プロジェクトにおいて、main()関数はトレーニングスクリプトや推論スクリプトのエントリポイントとなります。コマンドライン引数からハイパーパラメータを読み込み、ユーティリティをインポートして再利用できるようにし、実験のテストと自動化を容易にします。