2009-04-17 20 views
3

ただ1つのジェネレータとは対照的に、多くのジェネレータを一緒に使用してパフォーマンスを考慮する必要がありますか?例えばパフォーマンスに関する考慮事項Pythonで複数のジェネレータを使用するには?

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つの異なる発電機を通過しようとしている呼び出し元が、多くの状況で、それはよりよい異なるフィルタリングを処理するための別の発電機がある場合は、コードの再利用します。誰もこの技術を使用してパフォーマンスに重大な影響があることを示すことはできますか?

答えて

2

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

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

+0

同意:ジェネレータへの呼び出しは単なる関数呼び出しです(呼び出しが処理される時間は非常に短いはずです) 基本的にはlambda xと同じです:lambda x:ラムダx:x –

関連する問題