48 Генераторы и итераторы. Выражения -генераторы в Python

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 73

  • @egoroffchannel
    @egoroffchannel  6 місяців тому

    🫵 Теория без практики - ничто, поэтому 👇
    🐍 stepik.org/course/63085/promo
    👉 специально для тебя создал бесплатный топовый курс по Python
    👉 В нем тебя ждет:
    📗 более 400 практических заданий на программирование
    📗 более 250 тестовых заданий на проверку материала
    📗 десятки часов видеоматерилов по теории
    📗 видеоразборы решения заданий
    📗 текстовые материалы по урокам, примеры кода
    📗 доступ к закрытому чату с дружественной обстановкой
    📗 сертификат в случае успешного прохождения курса

    • @romankrieg817
      @romankrieg817 Місяць тому

      Привет! т.е. генераторы это теже кортежи?

  • @pan_kapkan
    @pan_kapkan 5 років тому +132

    Слушай, я столько смотрел и читал про генераторы\итераторы, но только ты смог мне гусю объяснить, что же это такое.
    Я твой электорат. Продолжай! :D

    • @Kotiche3cat3
      @Kotiche3cat3 4 роки тому +2

      а я хочу покер сделать но генератор нет :( :( :( :( :(

    • @slava_zxz
      @slava_zxz 11 місяців тому

      @@Kotiche3cat3 чтобы покер сделать, надо аим тренировать, а не программированием заниматься

  • @azarovdimka86
    @azarovdimka86 3 роки тому +12

    Автор видео!!! Спасибо, что ты есть! Ты прекрасный гениальный человек! Спасибо за доступное разъяснение! Ты обладаешь редким ценным качеством!

  • @Нострадамус-у3в
    @Нострадамус-у3в 5 років тому +29

    Отлично все объяснил! Хотя бы один человек применяет в обучающем видео все возможности программы записи скринкаста(карандаш, подчеркивание), что делает объяснение более понятным :)

  • @artemstepanenko2905
    @artemstepanenko2905 5 років тому +12

    Наконец-то нашел видео, после которого стало понятно, что есть итератор. Спасибо.

  • @sqrooch662
    @sqrooch662 2 роки тому +1

    Чувак, спасибо за то, что экономишь моё время.

  • @elenalevasheva3830
    @elenalevasheva3830 3 роки тому +8

    Спасибо вам за ваши уроки. У вас уроки просто песня!!! Так бы слушала и слушала. С вашими уроками не захочешь быть программистом, а станешь!

    • @slava_zxz
      @slava_zxz 11 місяців тому +1

      и че стала?

  • @СергейМатвеев-ь8й

    Доступно объяснил, спасибо

  • @ES-ng3el
    @ES-ng3el Рік тому

    Хорошее и понятное объяснение.Благодарю.

  • @osvab000
    @osvab000 4 роки тому +9

    Можно добавить еще такую аналогию:
    Допустим -Вы делаете запрос в поисковике - и он находит миллион ссылок! Для того чтобы их все отобразить - они не будут храниться в памяти где-то, а разобьются на куски (в виде найденных страниц). И вы уже видя все эти страницы - кликаете по ним, по мере необходимости, - и программа дальше запускается и отображает их.

  • @НикитаРадионов-я4л
    @НикитаРадионов-я4л 2 роки тому +2

    На моменте 6:15 лажа. Когда пишешь c = [ (i**2 for i in range(1,6)) ] и в принте выводишь c, то у тебя выводятся квадратные скобки, а это означает, что ты получил объект генератора внутри списка, но в видео говоришь противоположное. Если не веришь, то можешь через type(c) проверить, что c это list

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 2 роки тому +1

    Артём, благодарю! Отличное объяснение! 🔥🔥🔥 👍

  • @ДжонШепард-ы8й
    @ДжонШепард-ы8й 5 років тому +21

    Для меня это всё звучит как "Генераторы это генераторы, но генераторы это не генераторы, значит итерабельные объекты это генераторы, но не генераторы, которые были генераторами, однако сейчас генераторы". Возможно, дело в том, что List Comprehensions и генераторы не одно и то же.

  • @DeceptiRoma
    @DeceptiRoma 2 роки тому +1

    Спасибо! Доступно и понятно

  • @УсмонАхмадалиев-п5т
    @УсмонАхмадалиев-п5т 6 місяців тому

    Спасибо за объяснение

  • @fafafafa6779
    @fafafafa6779 2 роки тому +1

    спасибо за приятный и понятный контент!

  • @ЕрвандАгаджанян-в3к

    Ты как всегда на высоте) спасибо большое за видео!!!!

  • @ВалерияМалышева-ь1в

    Интересная тема! Осталось научиться применять на практике:). Пошла дальше слушать про функции генераторы)

  • @АртёмФадеев-я6у
    @АртёмФадеев-я6у 5 років тому +3

    Очень доходчиво/ наконец стало понятно

  • @СергейЮров-б6е
    @СергейЮров-б6е 2 роки тому +3

    Смотрю это видео спустя три года после его публикации. Во-первых, автор, спасибо за работу. Во-вторых, не знаю, как изменилось ваше понимание генераторов за эти три года… Но это видео и следующее за ним очень слабо раскрывают тему генераторов. И мне кажется причина не в том, что вы упростили материал для начинающих, а в том, что сами не поняли, что такое генераторы. Начиная с очевидного: через генераторы можно читать файлы. И заканчивая тем, что генераторы могут как возвращать, так и принимать значения друг у друга. Соответсвенно, нужно объяснить и конструкцию yield from. Справедливости ради: генераторы действительно очень хитрые. К примеру можно привести этот видос: ua-cam.com/video/tmeKsb2Fras/v-deo.html

  • @Михаил-я8ф8ю
    @Михаил-я8ф8ю 2 роки тому

    Мужик, ты супер крутой. Спасибо тебе.

  • @alibekjusupov9577
    @alibekjusupov9577 3 роки тому

    Спасибо за курс!

  • @dual200611111988
    @dual200611111988 2 роки тому

    Чувак ты крут. Разжевал так что информация сама в голову залетела

  • @shum4706
    @shum4706 Рік тому +1

    качественный контент

  • @Всепровсе-б2х
    @Всепровсе-б2х 3 роки тому

    Благодарю

  • @jamjam3337
    @jamjam3337 Рік тому +1

    👏

  • @МихаилПетровичЗубенко-р9в

    Спасибо😁

  • @katerynariaboshapko4037
    @katerynariaboshapko4037 4 роки тому

    Очень доходчиво! Спасибо огромное =)

  • @ВладиславСотников-т9н

    Красава!

  • @alexs2382
    @alexs2382 2 роки тому

    классное объяснение 👍

  • @anton-pavlov
    @anton-pavlov 5 років тому

    Спасибо!

  • @АлексейА-г8ы
    @АлексейА-г8ы 9 місяців тому

    Лайк

  • @evariste6943
    @evariste6943 2 роки тому

    ❓ВОПРОС❓ можно ли какм-то методом или ф-ей обновить выражение-генератор повторно не вводя его? я просто заметил что после полной итерации выражения-генератора оно не удаляется из памяти а как бы деактивируется

  • @lanaost4995
    @lanaost4995 3 роки тому

    Очень понравилось объяснение темы!
    На 4 минуте повторила код (как и весь предыдущий) в блокноте Jupyter (у меня Anaconda), и все зависло на несколько минут, а когда отвисло, оказалось, что все это время Python считал! (я рассчитывала на быстрый вывод сообщения об ошибке, как у лектора, и растерялась, но решила подождать, что будет. На комбинации клавиш и вызов Диспетчера не реагировал никак). У меня было 9 нулей, и теперь у меня есть массив из 10^9 элементов.
    Можете добавить в субтитры/описание или наложить на видео что-то вроде "Не повторять! Может зависнуть"?

    • @slava_zxz
      @slava_zxz 11 місяців тому

      компьютер слабый очень раз не может это переварить быстро

  • @BaraBarinov
    @BaraBarinov 3 роки тому

    🔥🙏🏼

  • @vladyan01
    @vladyan01 2 роки тому +1

    Генератор очень похож на обход выборки запроса в 1С =)

    • @slava_zxz
      @slava_zxz 11 місяців тому

      фу, зачем ты про 1 ass говоришь? выборка.Следующий() это гадость на русском, а не код

  • @Gv1don-n7w
    @Gv1don-n7w 3 роки тому +2

    Хорошее объяснение по моему мнению, однако очень не понравилось то, что в конце видео музыка просто разрывает уши своей громкостью относительно голоса до этого

    • @egoroffchannel
      @egoroffchannel  3 роки тому

      Да я поздно об этом узнал, теперь такого нету)

    • @Gv1don-n7w
      @Gv1don-n7w 3 роки тому

      @@egoroffchannel ну тогда вопросов нет

  • @alexanderabc6296
    @alexanderabc6296 3 роки тому +3

    А итератор разве не поддерживает тоже только один обход? Если два раза вызвать функцию sum к одному и тому же итератору, то во второй раз у меня выводится 0. Кто может объяснить?

    • @egoroffchannel
      @egoroffchannel  3 роки тому

      итератор поддерживает только один обход

    • @alexanderabc6296
      @alexanderabc6296 3 роки тому +4

      @@egoroffchannel, а что вы подразумеваете здесь в видео, когда определяете генератор, как «итератор, элементы которого можно итерировать только один раз»? Если итератор тоже один обход поддерживает, то чем в итоге генератор отличается от итератора (помимо того, что генератор это по сути способ задания итератора, как я понял)?

    • @JxSol
      @JxSol 3 роки тому +3

      @@alexanderabc6296 Вот и у меня сейчас стоит такой же вопрос. Во многих источниках генератор определяется как "итератор, элементы которого можно итерировать только один раз". Но ведь любой итератор удаляет элементы после того, как вернул их, поэтому в конце итератор полностью опустошается и в нём отсутствуют какие-либо элементы. Пока для себя я определил генератор как "итератор, элементы которого генерируются исключительно в момент итерации". Такое определение я дал из того, что итератором можно сделать любую последовательность, например, с помощью функции iter(), и такой итератор будет хранить в себе элементы этой последовательности, тогда как генератор всегда создаёт элементы в момент итерации.

    • @alexanderabc6296
      @alexanderabc6296 3 роки тому +1

      @@JxSol, я сейчас уже как месяц программированием не занимаюсь, но помню, что мне в итоге с этой темой помог разобраться курс «Основы и применение Python» на stepik, там тема отдельная про генераторы есть и итераторы. В общем, суть в том, что генератор это по сути просто напросто более удобная реализация итератора, а то, что здесь в этом видео про обходы сказано, вроде как неправильно, либо вообще не важно. Конкретно эту тему лучше там послушать, ещё перед этим видео про классы посмотреть, чтобы понятно было

    • @greeshanka8283
      @greeshanka8283 2 роки тому

      @@JxSol вот я тоже так подумал! вроде разницы нет, но она ведь есть!

  • @user-tc5dr6zj9z
    @user-tc5dr6zj9z 3 роки тому

    Все круто и понятно, только очень тихо.

  • @ЭмметтБраун-у3т
    @ЭмметтБраун-у3т 4 місяці тому

    только сейчас понял - истину "генераторов" - то,что они не хранятся в памяти и к ним не обратиться по индексу

  • @LusinaHarutyunyan
    @LusinaHarutyunyan 3 роки тому

    Пожалуйста дайте ссылку на 47 урок на boosty.

  • @SergiusBfg
    @SergiusBfg 7 місяців тому

    Самое главное - НАХЕРА? Кто и где это применяет?

  • @sseeer-r5d
    @sseeer-r5d 4 роки тому

    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, но что в них содержится пока не ясно.

    • @romanironov463
      @romanironov463 3 роки тому

      погугли про рекурсивные функции)

    • @slava_zxz
      @slava_zxz 11 місяців тому

      Разобрался?

  • @hovhannesayvazyan2339
    @hovhannesayvazyan2339 5 років тому

    В 6.25, когда ставим квадратные скобки по верх генератора, разве не получаем лист с одним генератором?

    • @ЕвгенийБелуха-щ8у
      @ЕвгенийБелуха-щ8у 5 років тому

      type([генератор]) -> list. это лист компрехеншен. теперь интересно, почему pycharm выдал генератор оО?

    • @inconstancy
      @inconstancy 4 роки тому +2

      @@ЕвгенийБелуха-щ8у pycharm выдал как раз список с одним элементом, и этим элементом является генератор. Таким образом, можно сделать список, который будет в себе хранить множество различных генераторов, и в нужный момент их оттуда вытаскивать и использовать.

  • @EscanorTime
    @EscanorTime 4 роки тому

    Добрый день.
    а почему 3 раза next(d) перебирает элементы списка, а 3 раза next(iter(s)) выдает всегда единицу?

    • @egoroffchannel
      @egoroffchannel  4 роки тому +2

      потому что каждый раз создается новая итерация и берется ее первый элемент.

    • @EscanorTime
      @EscanorTime 4 роки тому

      @@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" , но все равно не понятно к чему тут это...

  • @latinic8674
    @latinic8674 3 роки тому

    какая версия пайтона на видео?

  • @champloot
    @champloot 2 роки тому

    Странно, у меня получалось несколько раз выводить один и тот же генератор несколько раз...

  • @Herifs
    @Herifs 4 роки тому +1

    Так а зачем это? Ты так и не ответил на 2 вопрос

    • @TordMattias
      @TordMattias 3 роки тому

      Если в переменной содержится большое количество значений то надо использовать гениратор для предотвращения ошибки MemoryError

  • @Всеволод-ж8д
    @Всеволод-ж8д Рік тому

    Отписка.