9

現在、Python (2.7) で一部のデータを処理するための関数のモジュラー パイプラインを構築しています。

私はオブジェクトなしで、大まかに機能的なスタイルに固執しています (コードのタイプと適用しているルーチンについては、完全に理にかなっていて、これまでのコードはきちんとしていて読みやすいです。オブジェクトを設計すると、すべてがもう少し難読化されます)。

一貫性を保つために、フィールド名などを含むカスタムの名前付きタプルを定義しました。初期関数がいくつかのデータ ファイルを読み取り、これらの特別に定義されたタプルの 1 つを返すという考え方です。次の関数はそれを読み取り、データフィールドを操作して、変更された新しいタプルを返します (それらは不変であるため)。ただし、コレクションのインポートを実行してカスタム型を再定義する必要があることは避けられないようです。コード例を参照してください。

import collections
def NewFunction(MyCustomType):

    a = ...
    b = ...

    MyCustomType = collections.namedtuple('MyCustomType', 'a, b')
    return MyCustomType(a, b)

それは実際には問題を引き起こしているわけではありませんが、あまり繰り返しを行わずにそれを行うためのより「グローバルな」方法がないかのように興味があります. そして、もしあれば、私がやっている方法はより「副作用のない」別名機能的ではありませんか?? (実際にはここで 2 つの質問をして申し訳ありません。1 つ目は実用的な閉じた Python の質問で、2 つ目はよりオープンで哲学的な質問です。)

前もって感謝します!

4

1 に答える 1

15

namedtuple()関数は基本的にクラス ファクトリです。そのクラスをモジュール レベルで1 回ビルドします。

import collections

MyCustomType = collections.namedtuple('MyCustomType', 'a, b')

次に、代わりにMyCustomTypeどこでもインポートします。これは単なるクラスです。タプルを作成するたびにそのクラスを再作成する必要はありません。

import somemodule

def NewFunction(param):

    a = ...
    b = ...

    return somemodule.MyCustomType(a, b)
于 2013-07-04T18:32:09.363 に答える