Python академия
← К каналу

💾 Бесконечность не предел: Магия генераторов (yield) В прошлом посте мы восхищались списковыми включениями [...

💾 Бесконечность не предел: Магия генераторов (yield)

В прошлом посте мы восхищались списковыми включениями [...]. Но у них есть фатальный недостаток: они создают весь список в памяти сразу.

Представьте, что вам нужно обработать файл весом 10 ГБ. Если вы попытаетесь загрузить его в список read_lines(), ваш компьютер скажет "Memory Error" и программа упадет. 💥

Тут на помощь приходят Генераторы.

В чем отличие?

📦 Список (list): Хранит все элементы в памяти. Как готовая книга - все страницы уже напечатаны.

⚙️ Генератор: Не хранит данные. Он генерирует следующее значение только тогда, когда вы его попросите. Как рассказчик, который придумывает историю на ходу.

Как создать?

1. Генераторное выражение: Просто замените квадратные скобки [] на круглые ().

import sys

# Список (создает миллион чисел в памяти)
my_list = [x for x in range(1_000_000)]
print(f"List size: {sys.getsizeof(my_list)} bytes")
# ~8 000 000 байт (8 МБ)

# Генератор (просто формула)
my_gen = (x for x in range(1_000_000))
print(f"Gen size: {sys.getsizeof(my_gen)} bytes")
# ~100 байт (!!!)

Разница колоссальная! Генератор весит копейки, даже если в нем миллиард чисел.

2. Функция с yield:
Если логика сложная, используем функцию. Вместо return (который убивает функцию и возвращает результат), пишем yield (который ставит на паузу и отдает значение).

def endless_numbers():
n = 0
while True: # Бесконечный цикл!
yield n
n += 1

# Можно брать по одному
gen = endless_numbers()
print(next(gen)) # 0
print(next(gen)) # 1
# Программа не зависнет, несмотря на while True

🚀 Итог: Если вам не нужен доступ ко всем элементам сразу (например, по индексу list[10]), а вы просто перебираете их в цикле for - всегда используйте генераторы.

Знали про sys.getsizeof? Проверьте свои списки! 😉

Подписывайтесь на канал 👉 @python_of
Найти похожие посты в архиве
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота MAX: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
Удалить этот пост Удалить канал
🔍
Архив всех постов MAX
Поиск по тексту среди 2,870,823 постов из 195,430 каналов. Фильтры по дате, видео, репостам и удалённым публикациям.
1 ₽ — 14 дней доступа
далее 299 ₽/мес 599 ₽/мес
Получить доступ за 1 ₽
или войти, если уже есть аккаунт

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@security
Центр Безопасности MAX
Рассказываем о безопасности внутри мессенджера MAX и как не попасться на уловки мошенников. Квиз по информационной безопасности: https://max.ru/stop_moshennik_bot?starta…
👥 175 209 · +17 465/7д
@matematik_andrei_channel
Математик Андрей
Предзапись на следующий год https://clck.ru/3SnPXu Получить консультацию о курсах: https://max.ru/tochka_school_sales_bot Задать вопрос, если уже учитесь у нас:
👥 143 523 · +18 618/7д
@obr_mo
Образование Подмосковья
Новости об образовании в Московской области
👥 77 883 · -244/7д
@iqkot
Образование
Связь: https://clck.ru/3RbNj7
👥 77 004 · -9 721/7д
@Moscow_school
Московское образование
Успех начинается здесь! Для СМИ: press-donm@mos.ru Сайт: mosobr.shkolamoskva.ru ВК: vk.com/educationdep ТГ: https://t.me/depobr_mos
👥 69 831 · +685/7д
@bestch
Культура речи • Саморазвитие
Канал для тех, кто хочет удивлять друзей своей эрудированностью. Реклама: clck.ru/3R8TA9 Биржа: https://telega.in/m/bestch Менеджеры: clck.ru/3QxNG7 Русский язык Образо…
👥 61 079 · -388/7д

Популярные посты канала «Python академия»

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 5 698 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 5 663 просмотров
В чем сложность массивов и хешмапов в python Сложность массивов (списков) и хешмапов (словари) в Python зависит от операций, которые вы вып…
👁 5 640 просмотров
♾️ Бесконечные аргументы: Магия Звездочек Замечали, что в функцию print() можно передать сколько угодно значений? print(1, "a", [1,2], Tru…
👁 5 622 просмотров
Как использовать ключевое слово global в Python По умолчанию Python думает, что внутри функции вы хотите использовать локальную переменную.…
👁 5 596 просмотров
Как искать индекс элемента, которого, возможно, нет в списке Бывает, нужно получить индекс элемента, но мы не уверены, есть ли он в списке.…
👁 5 578 просмотров
📝 Код понятный без слов: Аннотации типов Python - язык с динамической типизацией. Это значит, что переменная x может сначала быть числом 5,…
👁 5 573 просмотров
Как найти индексы всех вхождений элемента в списке А что, если искомое значение встречается в списке несколько раз и мы хотим узнать индекс…
👁 5 563 просмотров
Как удалить ключ из словаря при помощи генератора Генераторы словаря в Python — это быстрые однострочники, которые позволяют легко создават…
👁 5 554 просмотров
PyAutoGUI PyAutoGUI позволяет Python управлять мышью и клавиатурой для автоматизации взаимодействия с другими приложениями. Пакет работает …
👁 5 549 просмотров
Проверка истинности объекта класса Для того, чтобы определить поведение при проверке на истинность объектов классов в python3 есть "магичес…
👁 5 504 просмотров
🔮 Магия Множеств: set круче списков Представьте задачу: у вас есть два списка подписчиков - из Instagram и из Telegram. 1. Нужно найти тех…
👁 5 482 просмотров
Пакет со всеми алгоритмами На днях обнаружил крутой пакет, в котором реализованы практически все алгоритмы, которые можно представить. Спи…
👁 5 477 просмотров
Изменение в контекстных менеджерах Как вы знаете, для удобного управления жизненным циклом ресурсов в python существуют контекстные менедже…
👁 5 433 просмотров
Метод lower() возвращает новую строку lower() возвращает новую строку. Этот момент логически вытекает из предыдущего. Следовательно, если в…
👁 5 429 просмотров
‍Функция zip в Python Функция zip принимает на вход в качестве аргументов итерируемые объекты, а возвращает итератор из кортежей, где i-й …
👁 5 383 просмотров
Валидация email-адресов Для проверки корректности email-адреса а также действительности его существования существует неплохой модуль valida…
👁 5 352 просмотров
🔄 Хватит писать range(len(...))! Новички часто переносят привычки из других языков в Python. Самый частый пример это циклы. ❌ Как пишет но…
👁 5 341 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 5 307 просмотров
Работаем с USB PyUSB — это библиотека, которая обеспечивает легкий доступ к USB. Имеет поддержку изохронной передачи, если её поддерживает …
👁 5 287 просмотров
🏷 Темы и теги
#задачи по python #python #программирование #обучение #алгоритмы #кодинг #Образование
📋 О канале Python академия
Учи Python быстро и легко.

Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам.

✔ Подходит для прокачки навыков кодирования.
← Предыдущий пост ⚡ Магия одной строки: List Comprehension Вы всё еще пишете циклы для заполнения… Следующий пост → 🔄 Хватит писать range(len(...))! Новички часто переносят привычки из других язы…
📊 Аналитика канала «Python академия» ➡️ Перейти в канал MAX
Заявка в МАКСОТЕКА
📌 Данные подтянутся автоматически по ссылке на канал. Логотип необязателен — ускоряет проверку.
🖼 Перетащите картинку или выберите файл
PNG, JPG, WEBP · до 5 МБ
captcha

Нажимая кнопку, вы соглашаетесь на обработку данных.
Проверим и добавим канал в течение суток.