2009-08-02 7 views
11

私は非常に具体的な機能を提供するいくつかの小さなモジュールを持っているPython Webアプリケーションに取り組んでいます:session.pylogger.pydatabase.pyなどです。これらのファイルのそれぞれには現在、約3〜5行のコードが含まれています。私は、いくつかのインポートとクラス定義、またはそれぞれに2つのインポートとを持つかもしれません。私は、これらのモジュールを1つのモジュールにマージしてはならない理由は何か、例えばmisc.pyのようなものはありますか?Python:いくつかの小さなモジュールまたは1つの大きなモジュールを好むか?

私の考えでは、これらのモジュールは、10本の以上のラインに成長いくつかの偶然、私はそれらを分離持っていることについてそれほど悪く感じることはありません場合は、別のモジュールを持つことが、後でコードの明瞭さを助け、ということです。しかし、一方では、ほんの数行しかないたくさんのファイルを持つのはそんなに浪費のようです。そして、マルチファイル対シングルファイルのアプローチの間に、リソースの使用に大きな違いはありますか? (もちろん私は、リソースの使用状況を心配しなければならないポイントはほど遠いよませんが、私が求めて抵抗することができませんでした...)

私は、これは前に頼まれていたと見ていなかったかどうかを確認するために周りの確認Python固有のものはありますが、実際には重複している場合は、正しい方向を指摘していただければ幸いです。私の考えは別の モジュールを有するコードの明瞭さを助け、そしてこれら のモジュールが10以上の行に成長いくつかの偶然場合 後に、私 がそれらを持っていることについてそれほど悪く感じることはありません ことです

+0

私はまた、(データ/実装)隠蔽/カプセル化/に役立つ多くの別個のモジュールを持つことを追加したいと思います。 –

答えて

4

分離された。

これです。あなたが持っている方法でそれを保つ。

+3

+1モジュールは再利用の単位です。あなたがそれを再使用することを熟考することができるならば、それを別々に保つ。 –

+2

モジュールをインポートすると、ファイルのシーク/リード操作が発生しますが、これは非常に高価です。したがって、モジュールを持つためのアプリケーションの起動コストはそれほど高くありません。 zipモードでコードを配布しない限り、数百のモジュールを使用すると、インポートに2〜5秒かかることがあります。 (ネットワークからインポートする場合はさらに多くなります)。 – Kozyarchuk

+1

"モジュールを持つためのアプリケーションの起動コストが軽い"本当に?私は気付かなかった。測定はありますか?この "非自明な"コストを表示できますか?我々は、数日間実行されるWebサーバーを持っています。あなたは100時間の稼働時間と比較して輸入量を測定できると言っていますか? –

3

個人的に私はエディタで少数のファイルを編集するという実用性のために、このようなことを1つのファイルに保存する方が簡単です。

重要なことは、のコードを別々のファイルにあるように扱うことです。したがって、あなたが引用した理由のために後で簡単に分けることができます。したがって、例えば、異なる部分間に依存関係を導入しないでください。後でそれらを解きほぐしにくくなります。あなたが好きなように

+1

+1それはそれを見て興味深い方法です。個人的には、コードの部分を別々のファイルとして扱う場合は、別々のファイルにコードを入れるだけです。しかし、それは個人的な意見のようなものです。 –

2

オフもちろん、あなたができるだけ多くのモジュールを持つことができます。

しかし、少し考えてみましょうと、今、我々は1つのファイルにすべての小さなコードスニペットを入れたとき、何が起こります。

私たちはどんな些細な小さいモジュールでimport文の数百人になってしまいます。そしてもちろん、別々のファイルに明示的に指定することで、少しだけ節約することもできます。しかし、何を想像してください:誰も多くのモジュール名を覚えることができず、とにかく正しいファイルを探し出すことになります。

私は大きなファイルにならない限り、1つのファイルにまとめるようにしています。 。しかし、私のシステムで他のコンポーネントに属さない小さな関数やクラスがある場合、私は "util"モジュールなどを持っています。私はまた、例えば、私のアプリケーションに応じて、これらをグループ化することを試みます。他の手段でそれらをレイヤー化または分離します。 1つの分離基準には、UIに使用されるユーティリティとそうでないユーティリティがあります。モジュールのユーザとして

4

、Iが大きく私は、単一のインポートを介してモジュール全体を含むことができる場合に好みます。別の代替言語をインポートする理由がない限り、パッケージのユーザーに複数のインポートを行わないでください。

ところで、1つのモジュールが複数のソースファイルで構成できない理由はありません。最も単純なケースは、__init__.pyファイルを使用して、モジュールの名前空間に他のすべてのコードをロードすることです。

+1

+1これは私の好みです。モジュールのユーザーに見せてもらうようにしますが、実装を分かち合い、明示的に分割しやすくしてください。 – Adam

0

小さい。

3

コマンドラインスクリプトでは、各呼び出しでモジュール内のすべてのファイルが呼び出されない限り、ほとんどの違いはありません。この場合、nファイルを1つだけ開く必要があるため、わずかなパフォーマンスが発生します。

mod_pythonの場合、バイトコンパイルされたモジュールがApacheプロセスの間存続するため、違いはほとんどありません。

サービスが常時使用されていない限り、パフォーマンスが低下しますが、各コールドスタートですべてのファイルを開く必要があるため「ホット」です。

関連する問題