🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
Отлично все объяснил! Хотя бы один человек применяет в обучающем видео все возможности программы записи скринкаста(карандаш, подчеркивание), что делает объяснение более понятным :)
Можно добавить еще такую аналогию: Допустим -Вы делаете запрос в поисковике - и он находит миллион ссылок! Для того чтобы их все отобразить - они не будут храниться в памяти где-то, а разобьются на куски (в виде найденных страниц). И вы уже видя все эти страницы - кликаете по ним, по мере необходимости, - и программа дальше запускается и отображает их.
На моменте 6:15 лажа. Когда пишешь c = [ (i**2 for i in range(1,6)) ] и в принте выводишь c, то у тебя выводятся квадратные скобки, а это означает, что ты получил объект генератора внутри списка, но в видео говоришь противоположное. Если не веришь, то можешь через type(c) проверить, что c это list
Для меня это всё звучит как "Генераторы это генераторы, но генераторы это не генераторы, значит итерабельные объекты это генераторы, но не генераторы, которые были генераторами, однако сейчас генераторы". Возможно, дело в том, что List Comprehensions и генераторы не одно и то же.
Смотрю это видео спустя три года после его публикации. Во-первых, автор, спасибо за работу. Во-вторых, не знаю, как изменилось ваше понимание генераторов за эти три года… Но это видео и следующее за ним очень слабо раскрывают тему генераторов. И мне кажется причина не в том, что вы упростили материал для начинающих, а в том, что сами не поняли, что такое генераторы. Начиная с очевидного: через генераторы можно читать файлы. И заканчивая тем, что генераторы могут как возвращать, так и принимать значения друг у друга. Соответсвенно, нужно объяснить и конструкцию yield from. Справедливости ради: генераторы действительно очень хитрые. К примеру можно привести этот видос: ua-cam.com/video/tmeKsb2Fras/v-deo.html
❓ВОПРОС❓ можно ли какм-то методом или ф-ей обновить выражение-генератор повторно не вводя его? я просто заметил что после полной итерации выражения-генератора оно не удаляется из памяти а как бы деактивируется
Очень понравилось объяснение темы! На 4 минуте повторила код (как и весь предыдущий) в блокноте Jupyter (у меня Anaconda), и все зависло на несколько минут, а когда отвисло, оказалось, что все это время Python считал! (я рассчитывала на быстрый вывод сообщения об ошибке, как у лектора, и растерялась, но решила подождать, что будет. На комбинации клавиш и вызов Диспетчера не реагировал никак). У меня было 9 нулей, и теперь у меня есть массив из 10^9 элементов. Можете добавить в субтитры/описание или наложить на видео что-то вроде "Не повторять! Может зависнуть"?
Хорошее объяснение по моему мнению, однако очень не понравилось то, что в конце видео музыка просто разрывает уши своей громкостью относительно голоса до этого
А итератор разве не поддерживает тоже только один обход? Если два раза вызвать функцию sum к одному и тому же итератору, то во второй раз у меня выводится 0. Кто может объяснить?
@@egoroffchannel, а что вы подразумеваете здесь в видео, когда определяете генератор, как «итератор, элементы которого можно итерировать только один раз»? Если итератор тоже один обход поддерживает, то чем в итоге генератор отличается от итератора (помимо того, что генератор это по сути способ задания итератора, как я понял)?
@@alexanderabc6296 Вот и у меня сейчас стоит такой же вопрос. Во многих источниках генератор определяется как "итератор, элементы которого можно итерировать только один раз". Но ведь любой итератор удаляет элементы после того, как вернул их, поэтому в конце итератор полностью опустошается и в нём отсутствуют какие-либо элементы. Пока для себя я определил генератор как "итератор, элементы которого генерируются исключительно в момент итерации". Такое определение я дал из того, что итератором можно сделать любую последовательность, например, с помощью функции iter(), и такой итератор будет хранить в себе элементы этой последовательности, тогда как генератор всегда создаёт элементы в момент итерации.
@@JxSol, я сейчас уже как месяц программированием не занимаюсь, но помню, что мне в итоге с этой темой помог разобраться курс «Основы и применение Python» на stepik, там тема отдельная про генераторы есть и итераторы. В общем, суть в том, что генератор это по сути просто напросто более удобная реализация итератора, а то, что здесь в этом видео про обходы сказано, вроде как неправильно, либо вообще не важно. Конкретно эту тему лучше там послушать, ещё перед этим видео про классы посмотреть, чтобы понятно было
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, но что в них содержится пока не ясно.
@@ЕвгенийБелуха-щ8у pycharm выдал как раз список с одним элементом, и этим элементом является генератор. Таким образом, можно сделать список, который будет в себе хранить множество различных генераторов, и в нужный момент их оттуда вытаскивать и использовать.
@@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" , но все равно не понятно к чему тут это...
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Привет! т.е. генераторы это теже кортежи?
Слушай, я столько смотрел и читал про генераторы\итераторы, но только ты смог мне гусю объяснить, что же это такое.
Я твой электорат. Продолжай! :D
а я хочу покер сделать но генератор нет :( :( :( :( :(
@@Kotiche3cat3 чтобы покер сделать, надо аим тренировать, а не программированием заниматься
Автор видео!!! Спасибо, что ты есть! Ты прекрасный гениальный человек! Спасибо за доступное разъяснение! Ты обладаешь редким ценным качеством!
Отлично все объяснил! Хотя бы один человек применяет в обучающем видео все возможности программы записи скринкаста(карандаш, подчеркивание), что делает объяснение более понятным :)
Наконец-то нашел видео, после которого стало понятно, что есть итератор. Спасибо.
Чувак, спасибо за то, что экономишь моё время.
Спасибо вам за ваши уроки. У вас уроки просто песня!!! Так бы слушала и слушала. С вашими уроками не захочешь быть программистом, а станешь!
и че стала?
Доступно объяснил, спасибо
Хорошее и понятное объяснение.Благодарю.
Можно добавить еще такую аналогию:
Допустим -Вы делаете запрос в поисковике - и он находит миллион ссылок! Для того чтобы их все отобразить - они не будут храниться в памяти где-то, а разобьются на куски (в виде найденных страниц). И вы уже видя все эти страницы - кликаете по ним, по мере необходимости, - и программа дальше запускается и отображает их.
На моменте 6:15 лажа. Когда пишешь c = [ (i**2 for i in range(1,6)) ] и в принте выводишь c, то у тебя выводятся квадратные скобки, а это означает, что ты получил объект генератора внутри списка, но в видео говоришь противоположное. Если не веришь, то можешь через type(c) проверить, что c это list
Артём, благодарю! Отличное объяснение! 🔥🔥🔥 👍
Для меня это всё звучит как "Генераторы это генераторы, но генераторы это не генераторы, значит итерабельные объекты это генераторы, но не генераторы, которые были генераторами, однако сейчас генераторы". Возможно, дело в том, что List Comprehensions и генераторы не одно и то же.
Спасибо! Доступно и понятно
Спасибо за объяснение
спасибо за приятный и понятный контент!
Ты как всегда на высоте) спасибо большое за видео!!!!
Интересная тема! Осталось научиться применять на практике:). Пошла дальше слушать про функции генераторы)
Очень доходчиво/ наконец стало понятно
Смотрю это видео спустя три года после его публикации. Во-первых, автор, спасибо за работу. Во-вторых, не знаю, как изменилось ваше понимание генераторов за эти три года… Но это видео и следующее за ним очень слабо раскрывают тему генераторов. И мне кажется причина не в том, что вы упростили материал для начинающих, а в том, что сами не поняли, что такое генераторы. Начиная с очевидного: через генераторы можно читать файлы. И заканчивая тем, что генераторы могут как возвращать, так и принимать значения друг у друга. Соответсвенно, нужно объяснить и конструкцию yield from. Справедливости ради: генераторы действительно очень хитрые. К примеру можно привести этот видос: ua-cam.com/video/tmeKsb2Fras/v-deo.html
Мужик, ты супер крутой. Спасибо тебе.
Спасибо за курс!
Чувак ты крут. Разжевал так что информация сама в голову залетела
качественный контент
Благодарю
👏
Спасибо😁
Очень доходчиво! Спасибо огромное =)
Красава!
классное объяснение 👍
Спасибо!
Лайк
❓ВОПРОС❓ можно ли какм-то методом или ф-ей обновить выражение-генератор повторно не вводя его? я просто заметил что после полной итерации выражения-генератора оно не удаляется из памяти а как бы деактивируется
Очень понравилось объяснение темы!
На 4 минуте повторила код (как и весь предыдущий) в блокноте Jupyter (у меня Anaconda), и все зависло на несколько минут, а когда отвисло, оказалось, что все это время Python считал! (я рассчитывала на быстрый вывод сообщения об ошибке, как у лектора, и растерялась, но решила подождать, что будет. На комбинации клавиш и вызов Диспетчера не реагировал никак). У меня было 9 нулей, и теперь у меня есть массив из 10^9 элементов.
Можете добавить в субтитры/описание или наложить на видео что-то вроде "Не повторять! Может зависнуть"?
компьютер слабый очень раз не может это переварить быстро
🔥🙏🏼
Генератор очень похож на обход выборки запроса в 1С =)
фу, зачем ты про 1 ass говоришь? выборка.Следующий() это гадость на русском, а не код
Хорошее объяснение по моему мнению, однако очень не понравилось то, что в конце видео музыка просто разрывает уши своей громкостью относительно голоса до этого
Да я поздно об этом узнал, теперь такого нету)
@@egoroffchannel ну тогда вопросов нет
А итератор разве не поддерживает тоже только один обход? Если два раза вызвать функцию sum к одному и тому же итератору, то во второй раз у меня выводится 0. Кто может объяснить?
итератор поддерживает только один обход
@@egoroffchannel, а что вы подразумеваете здесь в видео, когда определяете генератор, как «итератор, элементы которого можно итерировать только один раз»? Если итератор тоже один обход поддерживает, то чем в итоге генератор отличается от итератора (помимо того, что генератор это по сути способ задания итератора, как я понял)?
@@alexanderabc6296 Вот и у меня сейчас стоит такой же вопрос. Во многих источниках генератор определяется как "итератор, элементы которого можно итерировать только один раз". Но ведь любой итератор удаляет элементы после того, как вернул их, поэтому в конце итератор полностью опустошается и в нём отсутствуют какие-либо элементы. Пока для себя я определил генератор как "итератор, элементы которого генерируются исключительно в момент итерации". Такое определение я дал из того, что итератором можно сделать любую последовательность, например, с помощью функции iter(), и такой итератор будет хранить в себе элементы этой последовательности, тогда как генератор всегда создаёт элементы в момент итерации.
@@JxSol, я сейчас уже как месяц программированием не занимаюсь, но помню, что мне в итоге с этой темой помог разобраться курс «Основы и применение Python» на stepik, там тема отдельная про генераторы есть и итераторы. В общем, суть в том, что генератор это по сути просто напросто более удобная реализация итератора, а то, что здесь в этом видео про обходы сказано, вроде как неправильно, либо вообще не важно. Конкретно эту тему лучше там послушать, ещё перед этим видео про классы посмотреть, чтобы понятно было
@@JxSol вот я тоже так подумал! вроде разницы нет, но она ведь есть!
Все круто и понятно, только очень тихо.
только сейчас понял - истину "генераторов" - то,что они не хранятся в памяти и к ним не обратиться по индексу
+
Пожалуйста дайте ссылку на 47 урок на boosty.
Самое главное - НАХЕРА? Кто и где это применяет?
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, но что в них содержится пока не ясно.
погугли про рекурсивные функции)
Разобрался?
В 6.25, когда ставим квадратные скобки по верх генератора, разве не получаем лист с одним генератором?
type([генератор]) -> list. это лист компрехеншен. теперь интересно, почему pycharm выдал генератор оО?
@@ЕвгенийБелуха-щ8у pycharm выдал как раз список с одним элементом, и этим элементом является генератор. Таким образом, можно сделать список, который будет в себе хранить множество различных генераторов, и в нужный момент их оттуда вытаскивать и использовать.
Добрый день.
а почему 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
Отписка.
Почему?