ジェネレーターとクラス

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

難しい選択ではない


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

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 Mb0:00:02.330000
クラス200,504 Mb0:00:01.807000

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

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


Source: https://habr.com/ru/post/J150798/


All Articles