Pythonのmain関数理解:def main()の実践ガイド
Pythonのmain関数とは
main関数は、プログラムのエントリーポイントを示します。スクリプトが直接実行されると、インタプリタはコードを順次実行します。def main()内のコードは、スクリプトがプライマリモジュールとして実行されたときのみ実行され、インポート時には実行されません。
明確な例で確認しましょう。
例1: main()の定義
def main():
print("Hello World!")
print("Guru99")
このファイルを実行するとGuru99のみ出力されます。Hello World!行はmain()内にあり、呼び出されないためです。
main()をスクリプト直接実行時に実行するには、以下でガードする必要があります:
if __name__ == "__main__":
main()
これでスクリプトは期待通りに動作します。
例2: 適切なガード
def main():
print("Hello World!")
if __name__ == "__main__":
main()
print("Guru99")
このファイルを実行すると、コンソールに以下が表示されます:
Hello World!
Guru99
なぜこれが機能するのか?インタプリタは、ファイルが直接実行されると特殊変数__name__を"__main__"に設定します。ガードはこの条件をチェックしてからmain()を呼び出します。
__name__とモジュールの役割
__name__を理解することは、再利用可能なコードを書くために不可欠です。
def main():
print("hello world!")
if __name__ == "__main__":
main()
print("Guru99")
print("Value in built variable name is: ", __name__)
ファイルを直接実行すると、2つのメッセージと__main__としての__name__が出力されます。このスクリプトをモジュールとしてインポートすると:
import mainfunction
print("done")
doneのみ表示され、__name__はモジュール名を反映するため、main()は自動実行されません。
要約:
- 直接実行:
__name__ == "__main__"→main()実行 - モジュールとしてインポート:
__name__ != "__main__"→main()スキップ
Python 3ではシンプルなスクリプトにif __name__ == "__main__":は必須ではありませんが、ファイルが再利用される可能性がある場合はベストプラクティスです。Python 2では構文は同じですがprint文が異なります:
def main():
print "Hello World!"
if __name__ == "__main__":
main()
print "Guru99"
Python 3では以下のようにも書けます:
def main():
print("Hello World!")
main()
print("Guru99")
注意: def main():行の後のインデントを常に適切に保ち、エラーを避けてください。
Python
- Python ラムダ関数: 無名関数の実践ガイド
- Pythonジェネレータ:効率的イテレーションと高度なユースケース
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Pythonデコレータマスター:エキスパート技法で関数を拡張
- Python strip()メソッド完全ガイド:実践例付き
- Python len()関数:オブジェクトの長さを測る実践ガイド
- Python String.find()メソッド完全ガイド:構文、例、代替手法
- Pythonラムダ関数をマスターする:実例とベストプラクティス
- Python round()関数を実例で徹底解説
- Python map()関数をマスター:構文、例、ベストプラクティス
- Python yieldをマスター:ジェネレータvs return – 実践ガイド