9

私はフラスコアプリケーションを書いていますが、汎用ユーティリティ関数がたくさんあることがわかりました。

一般的なユーティリティ関数と見なす関数のタイプの例を次に示します。

def make_hash():
  return defaultdict(make_hash)

def file_read(filename):
  with open(file_name_, 'r') as f:
    return f.read()

def file_write(filename, data):
  with open(filename, 'w') as f:
    f.write(data)

これらの機能を別のモジュールにまとめて放り込むことを考えていました。ただし、次の懸念があるかどうかは興味があります。

  • 個別のモジュールをまとめて保証する固有の機能が 2 つあります。つまり、上記の file_read 関数と file_write 関数は file.py モジュールに入れることができますが、2 つの関数があるため、これはやり過ぎかもしれないと感じています。
  • 私のアプリケーションでは、これらの関数を関数ごとに 2 ~ 3 回使用しているため、これらのユーティリティ関数を作成することでコード行を節約でき、より効率的になることを願っています。

質問: - 汎用ユーティリティ関数をグループ化する Pythonic の方法は何ですか? 別のモジュールを作成する必要がありますか? このタイプのコードを整理するために他の人が何をしているのか興味があります。

4

3 に答える 3

2

Python とはあまり関係がないと思いますが、それは設計上の決定です。

これらの行だけについては、個別のモジュールを作成しません。ただし、2 ~ 3 回使用する場合は、コードをコピーしません。後で何かを変更したい場合、必要な変更は 1 つだけで、機能の一貫性が保たれます。

また、メソッドは非常に一般的であるように見えるため、後で他のプロジェクトで簡単に使用できます。

そして、それらを静的にしたいと思います(@static_method)。

私が主に行っているのは、一般的なユーティリティ クラスをタイプ別にグループ化することです。つまり、辞書用のファイル (メソッドが 1 つ) とファイル用のファイル (メソッドが 2 つ) があります。後でさらにメソッドが追加される可能性がありますが、機能はタイプ/用途別にグループ化されています。

于 2013-04-29T09:13:32.400 に答える
0

Python では、Package と呼ばれるものがあります (空のファイルが含まれる通常のフォルダー__init__.py)。これは、すべてのモジュールを格納するために使用されます。この方法で、何らかの名前間隔を作成します。

アプリケーションは、 を使用して独自の名前空間にアクセスできます。

たとえば、次のファイルがあります

MyPackage/__init__.py (empty)
MyPackage/webapp.py (your web application)
MyPackage/utils.py (generic utilities)

そして webapp.py では、このようなものを持つことができます

from .utils import *

またはそれらを1つずつリストします

from .utils import file_read, file_write

utils の前のドット接頭辞に注意してください

于 2013-04-29T09:18:32.817 に答える
0

モジュールのサブカテゴリを保持しながら、モジュール ファイルの数を減らすためにできることがあります。マルチレベル モジュール関数を作成します: myModule.Hash.<> myModule.FileIO.<>

このようにして、好みに応じて個々のコンポーネントをインポートできます。

于 2013-04-29T09:20:37.977 に答える