ジェネレーターとクラス

どちらを選択するかについての非常に小さな投稿:ジェネレーターまたはクラス(両方の方法で実装が可能な場合)。



難しい選択ではない



単純なタスク:移動平均を計算します。 最初の実装はクラスの形式でしたが、コンセプトに非常によく適合するジェネレーターの存在は落ち着きませんでした。 しかし、簡単なテストが選択を助けました。



class EMA(object): def __init__(self, alpha=0.5): self.value = 0 self.alpha = alpha def update(self, price): self.value = self.value + self.alpha * (price - self.value) def ema(alpha=0.5): result = 0 previous = (yield) while True: price = (yield result) result = result + alpha(price - result)
      
      





次に、2つの測定を実行します。100万のジェネレーターと100万のクラスを作成し、時間とメモリを調べます。

実装 記憶 時間
発電機 433.012 Mb 0:00:02.330000
クラス 200,504 Mb 0:00:01.807000


結論:Pythonのクラスは非常に軽量になりました。 それらを大胆に使用してください。



PSデバッガーでは、クラスは6秒以上作成され、ジェネレーターの作成時間は1秒だけ増加しました。 デバッガーの下で測定しないでください。



All Articles