48 Генераторы и итераторы. Выражения -генераторы в Python
ฝัง
- เผยแพร่เมื่อ 28 ก.ย. 2024
- 🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
stepik.org/cou...
👉👉👉 Свой вопрос по курсу можешь задать в чате
t.me/+SlnNhAO7...
👉👉👉 Также подписывайся на мой телеграмм-канал
t.me/python_eg...
egoroffartem.py...
Выражения - генераторы не хранят в памяти все свои элементы, а выдают их по одному по мере надобности
Генератор - итератор, элементы которого можно итерировать только один раз
Итератор - объект, который поддерживает функцию next(). Помнит о том, какой элемент будет браться следующим
Итерируемый объект - объект, который предоставляет возможность обойти поочередно свои элементы. Может быть преобразован к итератору.
Генераторы списков Python | List comprehension
• 46 Генераторы списков ...
Генераторы списков Python 2
• 47 Генераторы списков ...
egoroffartem.py...
На сайте будет выкладываться более подробная информация о данном курсе и будущих видео.
Все видео этого курса можете найти на сайте
egoroffartem.py...
или в Вк
videos-...
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_e...
python....
В данном группе можете найти информацию о новых видео и задать вопросы
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Автор видео!!! Спасибо, что ты есть! Ты прекрасный гениальный человек! Спасибо за доступное разъяснение! Ты обладаешь редким ценным качеством!
Для меня это всё звучит как "Генераторы это генераторы, но генераторы это не генераторы, значит итерабельные объекты это генераторы, но не генераторы, которые были генераторами, однако сейчас генераторы". Возможно, дело в том, что List Comprehensions и генераторы не одно и то же.
Слушай, я столько смотрел и читал про генераторы\итераторы, но только ты смог мне гусю объяснить, что же это такое.
Я твой электорат. Продолжай! :D
а я хочу покер сделать но генератор нет :( :( :( :( :(
@@Kotiche3cat3 чтобы покер сделать, надо аим тренировать, а не программированием заниматься
На моменте 6:15 лажа. Когда пишешь c = [ (i**2 for i in range(1,6)) ] и в принте выводишь c, то у тебя выводятся квадратные скобки, а это означает, что ты получил объект генератора внутри списка, но в видео говоришь противоположное. Если не веришь, то можешь через type(c) проверить, что c это list
Чувак, спасибо за то, что экономишь моё время.
Артём, благодарю! Отличное объяснение! 🔥🔥🔥 👍
Ты как всегда на высоте) спасибо большое за видео!!!!
спасибо за приятный и понятный контент!
Спасибо за объяснение
Смотрю это видео спустя три года после его публикации. Во-первых, автор, спасибо за работу. Во-вторых, не знаю, как изменилось ваше понимание генераторов за эти три года… Но это видео и следующее за ним очень слабо раскрывают тему генераторов. И мне кажется причина не в том, что вы упростили материал для начинающих, а в том, что сами не поняли, что такое генераторы. Начиная с очевидного: через генераторы можно читать файлы. И заканчивая тем, что генераторы могут как возвращать, так и принимать значения друг у друга. Соответсвенно, нужно объяснить и конструкцию yield from. Справедливости ради: генераторы действительно очень хитрые. К примеру можно привести этот видос: th-cam.com/video/tmeKsb2Fras/w-d-xo.html
Спасибо за курс!
качественный контент
Спасибо😁
только сейчас понял - истину "генераторов" - то,что они не хранятся в памяти и к ним не обратиться по индексу
👏
Генератор очень похож на обход выборки запроса в 1С =)
фу, зачем ты про 1 ass говоришь? выборка.Следующий() это гадость на русском, а не код
Красава!
Очень понравилось объяснение темы!
На 4 минуте повторила код (как и весь предыдущий) в блокноте Jupyter (у меня Anaconda), и все зависло на несколько минут, а когда отвисло, оказалось, что все это время Python считал! (я рассчитывала на быстрый вывод сообщения об ошибке, как у лектора, и растерялась, но решила подождать, что будет. На комбинации клавиш и вызов Диспетчера не реагировал никак). У меня было 9 нулей, и теперь у меня есть массив из 10^9 элементов.
Можете добавить в субтитры/описание или наложить на видео что-то вроде "Не повторять! Может зависнуть"?
компьютер слабый очень раз не может это переварить быстро
классное объяснение 👍
Все круто и понятно, только очень тихо.
Спасибо!
А итератор разве не поддерживает тоже только один обход? Если два раза вызвать функцию sum к одному и тому же итератору, то во второй раз у меня выводится 0. Кто может объяснить?
итератор поддерживает только один обход
@@egoroffchannel, а что вы подразумеваете здесь в видео, когда определяете генератор, как «итератор, элементы которого можно итерировать только один раз»? Если итератор тоже один обход поддерживает, то чем в итоге генератор отличается от итератора (помимо того, что генератор это по сути способ задания итератора, как я понял)?
@@alexanderabc6296 Вот и у меня сейчас стоит такой же вопрос. Во многих источниках генератор определяется как "итератор, элементы которого можно итерировать только один раз". Но ведь любой итератор удаляет элементы после того, как вернул их, поэтому в конце итератор полностью опустошается и в нём отсутствуют какие-либо элементы. Пока для себя я определил генератор как "итератор, элементы которого генерируются исключительно в момент итерации". Такое определение я дал из того, что итератором можно сделать любую последовательность, например, с помощью функции iter(), и такой итератор будет хранить в себе элементы этой последовательности, тогда как генератор всегда создаёт элементы в момент итерации.
@@JxSol, я сейчас уже как месяц программированием не занимаюсь, но помню, что мне в итоге с этой темой помог разобраться курс «Основы и применение Python» на stepik, там тема отдельная про генераторы есть и итераторы. В общем, суть в том, что генератор это по сути просто напросто более удобная реализация итератора, а то, что здесь в этом видео про обходы сказано, вроде как неправильно, либо вообще не важно. Конкретно эту тему лучше там послушать, ещё перед этим видео про классы посмотреть, чтобы понятно было
@@JxSol вот я тоже так подумал! вроде разницы нет, но она ведь есть!
Хорошее объяснение по моему мнению, однако очень не понравилось то, что в конце видео музыка просто разрывает уши своей громкостью относительно голоса до этого
Да я поздно об этом узнал, теперь такого нету)
@@egoroffchannel ну тогда вопросов нет
❓ВОПРОС❓ можно ли какм-то методом или ф-ей обновить выражение-генератор повторно не вводя его? я просто заметил что после полной итерации выражения-генератора оно не удаляется из памяти а как бы деактивируется
Лайк
В 6.25, когда ставим квадратные скобки по верх генератора, разве не получаем лист с одним генератором?
type([генератор]) -> list. это лист компрехеншен. теперь интересно, почему pycharm выдал генератор оО?
@@ЕвгенийБелуха-щ8у pycharm выдал как раз список с одним элементом, и этим элементом является генератор. Таким образом, можно сделать список, который будет в себе хранить множество различных генераторов, и в нужный момент их оттуда вытаскивать и использовать.
Пожалуйста дайте ссылку на 47 урок на boosty.
🔥🙏🏼
Добрый день.
а почему 3 раза next(d) перебирает элементы списка, а 3 раза next(iter(s)) выдает всегда единицу?
потому что каждый раз создается новая итерация и берется ее первый элемент.
@@egoroffchannel Спасибо за ответ. А не подскажите зачем обычно внутри самого итератора метод __iter__ ? разве __next__ не достаточно? в мануалах написано : "Return the iterator object itself. This is required to allow both containers and iterators to be used with the for and in statements" , но все равно не понятно к чему тут это...
Странно, у меня получалось несколько раз выводить один и тот же генератор несколько раз...
+
какая версия пайтона на видео?
3
Так а зачем это? Ты так и не ответил на 2 вопрос
Если в переменной содержится большое количество значений то надо использовать гениратор для предотвращения ошибки MemoryError
Отписка.
Почему?
Отлично все объяснил! Хотя бы один человек применяет в обучающем видео все возможности программы записи скринкаста(карандаш, подчеркивание), что делает объяснение более понятным :)
Можно добавить еще такую аналогию:
Допустим -Вы делаете запрос в поисковике - и он находит миллион ссылок! Для того чтобы их все отобразить - они не будут храниться в памяти где-то, а разобьются на куски (в виде найденных страниц). И вы уже видя все эти страницы - кликаете по ним, по мере необходимости, - и программа дальше запускается и отображает их.
Наконец-то нашел видео, после которого стало понятно, что есть итератор. Спасибо.
Спасибо вам за ваши уроки. У вас уроки просто песня!!! Так бы слушала и слушала. С вашими уроками не захочешь быть программистом, а станешь!
и че стала?
Очень доходчиво/ наконец стало понятно
Доступно объяснил, спасибо
Самое главное - НАХЕРА? Кто и где это применяет?
Интересная тема! Осталось научиться применять на практике:). Пошла дальше слушать про функции генераторы)
Спасибо! Доступно и понятно
Чувак ты крут. Разжевал так что информация сама в голову залетела
Хорошее и понятное объяснение.Благодарю.
Мужик, ты супер крутой. Спасибо тебе.
Очень доходчиво! Спасибо огромное =)
Благодарю
def how_deep(x):
n= 0
if isinstance(x, list):
return 1 + max(how_deep(itm) for itm in x)
return 0
print(how_deep([11,22,33,[12,21,32],[13,23,31,[14,25,34]]]))
Привет. Это кусок кода возращает глубину вложенности массива данных (т.е. максимальное количество листов вложенных в лист). Обьясните пожалуйста, как это работает. Если проганяю через pytutor, то вижу формируется иерархия list_iterator instance, но что в них содержится пока не ясно.
погугли про рекурсивные функции)
Разобрался?