2016-10-12 4 views
0

いくつかのPythonスクリプトでは、この形式を参照しています。他のPythonスクリプトでなぜこのようにいくつかのpythonスクリプトはmain()を宣言していますか?

def main(): 
    #run code 

if __name__ == "__main__": 
    main() 

、ラインif __name__ == "__main__":は存在しないが、コードは正常に動作します。コードがなくてもコードを正常に実行できるのはなぜですか? if __name__ == "__main__":を使用する利点は何ですか?

+0

私はgoogleをしたときに[これが最初の結果でした](https://docs.python.org/3/library/__main__.html)。 [これは2番目の](http://stackoverflow.com/questions/419163/what-does-if-name-main-do)。ここで質問する前に、自分で質問を調べてみてください。 –

+0

@ juanpa.arrivillaga。私はグーグルでしたが、私が読んだことは理解できません。この問題に直面した直接の回答は、SOコミュニティのおかげで分かりやすくなりました。 – user781486

+0

*これはすでにSO *に回答済みです。重複していることが分かっている場合は、重複した質問を投稿しないでください。 –

答えて

3

この行では、スクリプトをメインスクリプトとして実行する場合(たとえばpython my_script.py)にのみ、一部の機能をデフォルトで実行することができます。

これは、スクリプトをメインプログラムとして使用する場合や、別のPythonモジュールまたはPythonシェルにインポートする場合に便利です。後者の場合、メイン(または他のモジュール機能)がインポート時に実行されることはほとんどありません。インタープリタがスクリプトをロードするときにデフォルトで行われることです。

このスクリプトを他のコードやPythonシェルでインポートしない場合は、この行は必要ありません。しかし、あなたのコードをモジュール式に設計することは良いことです。&インポートフレンドリーです。 (例えば、数をプロットする、いくつかのログを解析するなどの)スクリプトを投げ捨てるように見えるものでさえ、より大きな文脈では有用であり得る。特に、対話型シェルセッションでは、 ipythonを使用してください。そして、コストは小さい:関数内に文をカプセル化し、ifmainを追加する。

+0

この行のようなサウンドは、インポートされるコードに対してのみ必要です。正しい? – user781486

+3

@ user91579631私の個人的な経験では、コードをモジュール化して読みやすいように設計するのは良いことですが、たとえ投げ捨てスクリプトとして表示されるものであっても(例:数字のプロット、ログの解析など)、大きな文脈 –

+0

ありがとうございました。 'if __name__ ==" __main __ ":'を使うのは良い習慣のようです – user781486

1

これは、モジュールを作成しているときや、他のスクリプトを実行しているときにあなたのsciptをインポートしようとするときに一般的に便利です。​​は、そのスクリプトが実行されるメインスクリプトである場合にのみtrueになり、インポートステートメントで実行されたときに後続のコードを実行することがなくなります。

関連する問題