3

単一のジェネレーターではなく、チェーン化された多数のジェネレーターを使用する場合のパフォーマンスに関する考慮事項はありますか。

例えば:

def A(self, items):
    for item in self.AB(items):
        if object.A():
            yield item

def AB(self, items):
    for object in self.ABC(objects):
        if object.A() or object.B():
            yield object

def ABC(self, objects):
    for object in objects:
        if object.A() or object.B() or object.C():
            yield object

呼び出しA(objects)が 3 つの異なるジェネレーターを経由することは明らかですが、多くの場合、異なるフィルター処理を処理するための異なるジェネレーターがあると、コードの再利用が改善されます。この手法を使用してパフォーマンスに重大な影響があることを誰かが示すことができますか?

4

1 に答える 1

2

ジェネレーターのチェーンに問題はありませんが、この例では、Aがself.ABを呼び出す理由はありません。アイテムをループするだけで、同じ結果を得ることができます。

コードはできるだけ明確に記述し、遅い場合はプロファイラーを使用してボトルネックがどこにあるかを判断する必要があります。このような不自然な例は、現実からかけ離れているため、パフォーマンスの有用な指標にはなりません。

于 2009-04-17T11:04:33.093 に答える