Генераторы vs классы

в 18:23, , рубрики: python, генераторы, классы, ооп, оптимизация, метки: , , , ,

Очень маленький пост о том, что выбрать: генератор или класс, когда реализация возможна обеими способами.

Не сложный выбор

Простая задача: рассчитывать скользящее среднее. Первоначальная реализация была в виде класса, но не давало покоя наличие генераторов, которые как-то очень подходили под концепцию. Но простой тест помог сделать выбор.

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 = None
    previous = (yield)
    while True:
        price = (yield result)
        result = result + alpha(price - result)

Теперь проводим 2 замера: создаём миллион генераторов и миллион классов, исследуем время и память:

Реализация Память Время
Генераторы 433,012 Мб 0:00:02.330000
Классы 200,504 Мб 0:00:01.807000

Вывод: классы в Python сделаны очень легковесными. Используйте их смело.

P.S. Под дебаггером классы создавались более 6 секунд, а время создания генераторов увеличилось всего на 1 секунду. Не проводите замер под отладчиком.

Автор: deko

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js