2

私は質問についての意見を聞きたいです:後にたくさんのコードを持っているのは悪い考えですか?

if __name__ == '__main__':

私がこれを求めている理由は、私の現在のプロジェクトには約400百行のコードがあり、それが大きくなるにつれて、上記のステートメントの後に行を追加し続けるからです。したがって、このプログラムは約3000行のコードであると予想され、このステートメントの後にコードが多すぎるのではないかと心配しています。それで、質問「このステートメントの後にたくさんのコードを書くのは良いpythonicな方法ですか?」

4

3 に答える 3

5

簡単な代替方法は、メイン コードを関数に追加し、チェックmain()後に呼び出すだけです。__name__そうすれば、次のようになります。

  • __name__チェックのメリット
  • 関数の利点 (再利用できる場合とできない場合があります)
  • イントロスペクションの利点 (たとえば、必要に応じて、モジュールの「メイン」コードが何であるかを自動的に分析するのは簡単です。それは単なるmain関数です!)。

例:

def main():
    # Be awesome here.

if __name__ == '__main__':
    main()  # or sys.exit(main()), if you want to return an exit code
于 2012-12-18T19:37:18.927 に答える
1

ここには、次の 2 つの明確なポイントがあるように思われます。

  • 他のすべての条件が同じであれば、400 行の命令コードによって表される動作をカプセル化する関数を定義する方が、読みやすさ、テストのしやすさ、保守のしやすさ (およびおそらく「-ability」の他の値) にとって優れています。

  • で修飾されたコードは、 でモジュールとして含まれているので__name__ == '__main__'はなく、ファイルが直接呼び出されたときにのみimport実行されます。したがって、次のようなファイル

    def be_awesome():
        pass
    
    
    if __name__ == '__main__':
       def be_more_awesome():
            pass
    

be_more_awesomeインポートされたときではなく、python の呼び出しへのソース引数として提供されたときの定義のみを持ちます。したがって、原則として__name__、ファイルをスクリプトとして直接実行する場合にのみ実行する必要があるコードを正確にテストの後に配置することが適切です。これらの質問を自問してください

  • 「このモジュールを別のファイルにインポートした場合、このコードが実行されるのはよくありませんか?」
  • 「このファイルを直接呼び出すときに、このコードを呼び出す必要がありますか?」main( 400 行をカプセル化する仮想関数の場合のように)

これらの質問のいずれかに対する答えが「はい」の場合、それは (おそらく)__name__テスト後に属します。そうでない場合は、(おそらく)そうではありません。

于 2012-12-18T20:32:45.650 に答える
1

コードを再利用したい場合は、後でそれを保持しないでくださいif __name__ == '__main__'(これを関数/クラス/モジュールに使用し、プログラムのこの部分から可能な限り単純な呼び出しを行います)。そして、ここで Zen of Python について言及させてください (あなたの場合、少なくとも 2 つの点が重要です):

疎は密よりも優れています。

読みやすさが重要です。

于 2012-12-18T19:37:25.083 に答える