どちらを選択するかについての非常に小さな投稿:ジェネレーターまたはクラス(両方の方法で実装が可能な場合)。
難しい選択ではない
単純なタスク:移動平均を計算します。 最初の実装はクラスの形式でしたが、コンセプトに非常によく適合するジェネレーターの存在は落ち着きませんでした。 しかし、簡単なテストが選択を助けました。
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秒だけ増加しました。 デバッガーの下で測定しないでください。