Pull to refresh

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

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

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


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

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 замера: создаём миллион генераторов и миллион классов, исследуем время и память:
Реализация Память Время
Генераторы 433,012 Мб 0:00:02.330000
Классы 200,504 Мб 0:00:01.807000

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

P.S. Под дебаггером классы создавались более 6 секунд, а время создания генераторов увеличилось всего на 1 секунду. Не проводите замер под отладчиком.
Tags:
Hubs:
Total votes 15: ↑8 and ↓7+1
Comments13

Articles