Друкарня від WE.UA

Насправді дуже крута штука, використавши яку тебе зауважає тімлід 😎

Що це та навіщо?

Генератор — це функція з yield або вираз (comprehension), що вертає ітератор (те, по чому можна пройтись циклом)

Генетори дуже корисні, коли нам не потрібно усі дані одразу, або ці дані генеруються динамічно

Найпростійший приклад — range([start], stop) - це генератор, що продукує послідовно цілі числа, починаючи з числа start, і зупиниться перед stop. Пам’ять пристрою буде використана лише для поточного числа в циклі, а не для мільйону чисел — чудове заощадження пам’яті 🤩

Як це виглядає?

generator_comprehension = (i**2 for i in range(10))

def generator_function(n):
    for i in range(n):
        yield i ** 2

generator = generator_function(10)

# Використання

# Цей код може бути використаним лише раз, бо генератор вичерпав свої значення
for j in generator:
    print(j)
for k in generator_comprehension:
    print(k)

# А цей можна повторювати вічно
for l in generator_function(100):
    print(l)

Виглядає просто, але водночас є гнучкішим та ефективнішим, ніж код нижче

def common_function(n):
    result = []
    for i in range(n):
        result.append(i ** 2)
    return result

# Цей код створить масив на 100 чисел
for j in common_function(100):
    print(j)

squared_numbers = common_function(100)
# Цей код теж можна повторювати вічно, бо масив давно в пам'яті
# Але зазвичай ми так не пишемо
for k in squared_numbers:
    print(k)

А можна реальний приклад?

Так, і хорошим прикладом тут буде — зрівняння/сплощення списку списків (flattening list):

def flatten(nested_list):
    for item in nested_list:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

# Використання:
nested_list = [1, [2, [3, 4], 5], 6], [7, 8]]
flattened_list = list(flatten(nested_list))
# Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Тобто, при будь-якій вкладеності списків в результаті у нас буде лише один список

Тут можна помітити рекурсію, але під час виконання функції, насправді не забирається зайва пам'ять, бо yield from фактично передає контроль над генерацією даних — новому генератору

Q&A

Якщо у вас все ще залишились запитання про генератори у пайтоні — завжди готовий відповісти у коментарях, а якщо про щось інше — теж пишіть, може зроблю з цього нову статтю

Усім добра та мирного неба над головою ❤️

Додаткові матеріали

Багато про генератори та корутини (предок async)

Статті про вітчизняний бізнес та цікавих людей:

  • Як модні бренди формують культуру та впливають на глобальні fashion-тренди

    Модні бренди часто стають символами ідентичності. Вони впливають на вибір способу життя не тільки в одязі — розкішні годинники, парфуми, товари для дому та враження підкріплюють культурні наративи успіху, смаку та вишуканості.

    Теми цього довгочиту:

    Мода
  • Створити блог на Друкарні - швидко, легко та безкоштовно

    Друкарня - це зручне та безкоштовне середовище для ведення власного блогу. В даній статті ми розповідаємо про основні переваги та функціональні можливості для того, щоб зацікавити нових авторів створити власний блог на Друкарні. Будь ласка, поширте цю інформацію.

    Теми цього довгочиту:

    Друкарня
  • Чому Google Merchant Center може заблокувати обліковий запис?

    Одним з найбільш ефективних каналів продажів є система Google Merchant Center. Правда, акаунт в ній може бути несподівано заблокований, якщо при його налаштуванні були порушені правила системи. У статті розглянемо підводні камені і дамо відповідь як уникнути блокування

    Теми цього довгочиту:

    Google Merchant Center
  • Бухгалтерський супровід ФОП: сучасний підхід до обліку

    Завдяки розвитку інформаційних технологій, впровадженню сучасних рішень і сервісів процес ведення бухобліку бізнесу став значно простішим і зручним. З іншого боку, ті ж технології додали бухгалтерам роботи – з обліком онлайн-продажів і надходжень у валюті, CRM-системами та ін.

    Теми цього довгочиту:

    Бухгалтерський Облік Фоп
  • Пилосос як базова техніка для щоденного прибирання

    Підтримання чистоти в оселі потребує зручних і продуманих рішень, особливо коли йдеться про догляд за різними поверхнями. У домашньому побуті пилосос залишається базовою побутовою технікою, що поєднує сухе та вологе очищення без зайвих зусиль.

    Теми цього довгочиту:

    Пилососи
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Вітя
Вітя@kor0p we.ua/kor0p

Python SDET @ ajax.systems

6Довгочити
853Прочитання
18Підписники
Підтримати
На Друкарні з 14 квітня

Більше від автора

Це також може зацікавити:

Коментарі (2)

Як працює “from”, який стоїть після “yield”?

Це також може зацікавити: