49 Функция генератор. Создание генератора при помощи yield Python
HTML-код
- Опубликовано: 28 сен 2024
- 🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
stepik.org/cou...
👉👉👉 Свой вопрос по курсу можешь задать в чате
t.me/+SlnNhAO7...
👉👉👉 Также подписывайся на мой телеграмм-канал
t.me/python_eg...
egoroffartem.py...
Функция-генератор могут возвращать значение и приостанавливать свою работу, а позднее продолжить свою работу с места остановки
Для создания функции генератора используется ключевое слово yield.
Генератор - итератор, элементы которого можно итерировать только один раз
Итератор - объект, который поддерживает функцию next(). Помнит о том, какой элемент будет браться следующим
Итерируемый объект - объект, который предоставляет возможность обойти поочередно свои элементы. Может быть преобразован к итератору.
Выражения - генераторы Python
• 48 Генераторы и итерат...
egoroffartem.py...
На сайте будет выкладываться более подробная информация о данном курсе и будущих видео.
Все видео этого курса можете найти на сайте
egoroffartem.py...
или в Вк
videos-...
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_e...
python....
В данном группе можете найти информацию о новых видео и задать вопросы
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Луца читал, мало что понял.
А теперь сначало смотрю ваше видео по теме, а после читаю Луца. Стал больше понимать.
Благодарю Вас за труд!
Только за это же хотел поблагодарить. Вот, кто должен программирование в ВУЗах вести)))
потому что Лутц это графоманство, а не учебник
У меня Луц тяжело идет. Стиль изложения довольно запутанный, на мой взгляд.
Тоже после Лутца пришел. Однако то, что Егор рассказывает, я понимал уже из учебника (за исключением некоторых мелочей). Но Лутц ещё о других вещах касаемо генератора рассказывает. Вот их я не понял(
P.S. Правда, я не очень понимаю, как на практике пригодится написание собственных функций zip и map :D
Я бросил Лутца на 600 странице.
Рекомендую 10% времени посвящать книгам, 10% - теории, 80% - написанию кода
Чисто вот по человечески спасибо. Обычным языком разжевал!
Артем ❤️ спасибо большое , вы просто супер 🙌 очень хорошо объясняете 🙏 все уроки смотрю ваши 🙌 прям очень классно объясняете 👍👍👍👍👍 и голос очень приятный ! Спасибо за ваш труд 🙏❤️
Артём, огромная благодарность! 🔥👍 💯
Шикарные уроки, спасибо!
Спасибо за отличное объяснение!
АААА! Я не могу въехать!
Обновлено: Я детально посмотрела видео на след. день и всё поняла, спасибо!
Это было просто гениальное объяснение!
Спасибо большое, очень доступно и понятно, только сейчас понял хотя до этого в других источниках не понимал
Очень грамотно и по человечески объяснил. Спасибо
Отличный канал! Подписка и лайк. Спасибо за уроки.
Очень все понятно, спасибо!
Все очень понятно!
Спасибо, очень доступно объясняете !
Ты просто изумруд браток, спасибо тебе
Артем, вы гений.
Может, добавить какие то команды, выводящие объем занимаемой памяти или какие другие показатели эффективности yield для ещё большей наглядности...
Блеск! Спасибо!!!
Спасибо большое
Больше По питону
поставил лайк уже на 2й минуте. спасибо, за простое и понятное объяснение
В примере с факториалом вместо yield, вписав print, получим тот же результат. Тогда преимущество функции генератора тут не совсем очевидна.
Действительно хорошее объяснение)
Спасибо
Лучший!!!
Спасибо за урок
Получается, генератор при вызове
print(next(genf()))
Запускает цикл и "ставит его на паузу" до следующего next()
А после его вызова она начинает выполнение кода на следующей строке
Правильно понял?
Выходит, что так.
Вы делаете замечательные видео! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (behave today finger ski upon boy assault summer exhaust beauty stereo over). Можете подсказать, как перевести их на Binance?
Огонь!
👍
Спасибо!!
Братан, а можешь напечатать чип, загрузить в него все свои знания и я их себе загружу в мозг, как в киберпанке
могу, но там будут баги)))
после yield, pr не обновляться опят на один?
вот зачем нужна yield если это все равно считается итерацией словаря, я беру yield(ключ словаря) из цикла фор,
потом в другом цикле вайл тру сохраняю его в список, беру из списка значение и удаляю из словаря, далее очищаю список
самое интересное, что можно итерировать словарь по ключам, добавить в список (нужный вам)ключ и в "старшем цикле" фор удалить значение словаря и все работает
в 1 случае ошибка, нельзя изменять словарь во время итерации, зато список можно да пайтан? кто тебя пишет какой умный человек
всё круто, но не хватает send :(
def fact(n):
p = 1
for i in range(1, n + 1):
p = p * 1
yield p
for i in fact(10):
print(i, end = " ")
У меня получается не факториал, а список из десяти единиц. Почему?
Напиши в четвертой строчке i вместо единицы
yield i
1
йилд
Нет
Как же хорошо объясняете. Нам бы таких преподов))))
спасибо за урок
Ждал интера, но не тут то было, на сцену вышел yield и Егорыч тяжело сглотнув все таки попробовал выговорить елд...но по привычке получилось нечто похожее на слово "елда".
Артем спасибо большое, очень хорошо объясняете👍👍👍
Остальные темы я понял. В эту что-то не могу пока въехать. Наверное, позже вернусь, когда сформируются нужные нейронные связи в моей башке))
Ну что, сформулировались ?
@@Николай-ф3е7в Пришлось сконцентрироваться на PHP)) Пока занят попытками въехать в ООП)
@@dizelvinable Ну, что въехал?
Ну как, дошло?
@@dizelvinable ну что там, дошло?
Спасибо за урок, просто супер.
Нужно это редко и для специфических задач. Новичкам не нужно совсем.
почему ты находишь факториал как n + 1, а не n - 1 как объяснял в предыдущих уроках? это я не поняла
6:32 что значит не хранятся в списке? Вы же сами сказали выше, что функция ставится на паузу. Вы просто не явно создали этот список, а "поручили" сделать это самому python'у. 6:36 каким образом мы экономим память? В чём тут экономия? Запустите код с memory_profiler и вы увидите, что в одном, что в другом случае вы потребите 46 мегабайт памяти. В случае с yield даже больше.
Так ты попробуй создать список с 1000000000 елементов и получишь ошибку по памяти(а если мощи компа хватит то получишь жесткое подвисание), в то время как с генератором такой ошибки не возникает. Так они и не храняться в списке, тут отдельно выдается каждое значение, сам генератор не хранит всего списка значений, а поочередно выдает каждый елемент отдельно на базе предыдущего, поэтому и память экономится, потому что мы не храним одномоментно 1000000000 елементов.
@@torchilla4630 Вы точно на мой комментарий отвечали? 😑При чём тут хранение, если выше я говорил про вычисление факториала и экономию памяти?
Речь о том, что потребление скриптом памяти с оператором yield и без него будет одинаковое. Можете проверить сами:
Файл_1
from memory_profiler import memory_usage
def fact(n):
output = 1
for i in range(1, n+1):
output *= i
yield output
def main():
output_list = []
for dig in fact(500):
output_list.append(dig)
print(f'{output_list[-1]=}')
main()
print(f'
{memory_usage()=}')
Файл_2
from memory_profiler import memory_usage
def fact_2(n):
output = 1
for i in range(1, n+1):
output *= i
return output
def main():
output_list = []
for dig in range(501):
output_list.append(fact_2(dig))
print(f'{output_list[-1]=}')
main()
print(f'
{memory_usage()=}')
@@Markisi0 Да, отчасти вы правы, но дело в том, что при работе с оператором yield, после вывода значения, предыдущие значения очищаються с памяти. Вот, если взять первый пример. С начало программа нам выводит число 43, потом число 65 и при выводе числа 65, число 43 стираеться с памяти, будто его и не было. А если повторить данную махинацию с оператором return, то все данные останутся в памяти. Надеюсь, что понятно обьяснил..
@@FireFox-cp8fc Вы лучше объясните результат выполнения двух вариантов кода выше - почему при использовании yield и без него памяти затрачивается одинаковое количество?
Тяжко
Я хочу индивидуальные уроки по Python
Отлично +
господи, ну как же это понятно и элегантно. спасибо!
Артем, в наушниках на максималках плохо слышно.
Сейчас новый микрофон
Исчерпывающе!
Артем, ну ты тараторишь, чуть помедленнее пожалуйста, приходится перематывать