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....
    В данном группе можете найти информацию о новых видео и задать вопросы

ความคิดเห็น • 72

  • @egoroffchannel
    @egoroffchannel  4 หลายเดือนก่อน

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

  • @azarovdimka86
    @azarovdimka86 3 ปีที่แล้ว +11

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

  • @ДжонШепард-ы8й
    @ДжонШепард-ы8й 5 ปีที่แล้ว +20

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

  • @pan_kapkan
    @pan_kapkan 5 ปีที่แล้ว +128

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

    • @Kotiche3cat3
      @Kotiche3cat3 3 ปีที่แล้ว +2

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

    • @slava_zxz
      @slava_zxz 9 หลายเดือนก่อน

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

  • @НикитаРадионов-я4л
    @НикитаРадионов-я4л 2 ปีที่แล้ว +1

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

  • @sqrooch662
    @sqrooch662 ปีที่แล้ว +1

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

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 2 ปีที่แล้ว +1

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

  • @ЕрвандАгаджанян-в3к
    @ЕрвандАгаджанян-в3к 3 ปีที่แล้ว +2

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

  • @fafafafa6779
    @fafafafa6779 2 ปีที่แล้ว +1

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

  • @УсмонАхмадалиев-п5т
    @УсмонАхмадалиев-п5т 4 หลายเดือนก่อน

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

  • @СергейЮров-б6е
    @СергейЮров-б6е ปีที่แล้ว +3

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

  • @alibekjusupov9577
    @alibekjusupov9577 3 ปีที่แล้ว

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

  • @shum4706
    @shum4706 ปีที่แล้ว +1

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

  • @МихаилПетровичЗубенко-р9в
    @МихаилПетровичЗубенко-р9в 5 ปีที่แล้ว +2

    Спасибо😁

  • @ЭмметтБраун-у3т
    @ЭмметтБраун-у3т 2 หลายเดือนก่อน

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

  • @jamjam3337
    @jamjam3337 ปีที่แล้ว +1

    👏

  • @vladyan01
    @vladyan01 2 ปีที่แล้ว +1

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

    • @slava_zxz
      @slava_zxz 9 หลายเดือนก่อน

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

  • @ВладиславСотников-т9н
    @ВладиславСотников-т9н ปีที่แล้ว

    Красава!

  • @lanaost4995
    @lanaost4995 2 ปีที่แล้ว

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

    • @slava_zxz
      @slava_zxz 9 หลายเดือนก่อน

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

  • @alexs2382
    @alexs2382 2 ปีที่แล้ว

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

  • @user-tc5dr6zj9z
    @user-tc5dr6zj9z 3 ปีที่แล้ว

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

  • @anton-pavlov
    @anton-pavlov 5 ปีที่แล้ว

    Спасибо!

  • @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 вот я тоже так подумал! вроде разницы нет, но она ведь есть!

  • @Gv1don-n7w
    @Gv1don-n7w 3 ปีที่แล้ว +1

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

    • @egoroffchannel
      @egoroffchannel  3 ปีที่แล้ว

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

    • @Gv1don-n7w
      @Gv1don-n7w 3 ปีที่แล้ว

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

  • @evariste6943
    @evariste6943 2 ปีที่แล้ว

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

  • @АлексейА-г8ы
    @АлексейА-г8ы 8 หลายเดือนก่อน

    Лайк

  • @hovhannesayvazyan2339
    @hovhannesayvazyan2339 4 ปีที่แล้ว

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

    • @ЕвгенийБелуха-щ8у
      @ЕвгенийБелуха-щ8у 4 ปีที่แล้ว

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

    • @inconstancy
      @inconstancy 4 ปีที่แล้ว +2

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

  • @LusinaHarutyunyan
    @LusinaHarutyunyan 3 ปีที่แล้ว

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

  • @BaraBarinov
    @BaraBarinov 3 ปีที่แล้ว

    🔥🙏🏼

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

  • @champloot
    @champloot 2 ปีที่แล้ว

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

  • @ДмитрийВладимиров-щ8у
    @ДмитрийВладимиров-щ8у 2 ปีที่แล้ว

    +

  • @latinic8674
    @latinic8674 3 ปีที่แล้ว

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

    • @slava_zxz
      @slava_zxz 9 หลายเดือนก่อน

      3

  • @Herifs
    @Herifs 4 ปีที่แล้ว +1

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

    • @TordMattias
      @TordMattias 3 ปีที่แล้ว

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

  • @Всеволод-ж8д
    @Всеволод-ж8д ปีที่แล้ว

    Отписка.

    • @m_i_r_k
      @m_i_r_k ปีที่แล้ว

      Почему?

  • @Нострадамус-у3в
    @Нострадамус-у3в 5 ปีที่แล้ว +28

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

  • @osvab000
    @osvab000 4 ปีที่แล้ว +8

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

  • @artemstepanenko2905
    @artemstepanenko2905 4 ปีที่แล้ว +11

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

  • @elenalevasheva3830
    @elenalevasheva3830 3 ปีที่แล้ว +8

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

    • @slava_zxz
      @slava_zxz 9 หลายเดือนก่อน +1

      и че стала?

  • @АртёмФадеев-я6у
    @АртёмФадеев-я6у 5 ปีที่แล้ว +3

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

  • @СергейМатвеев-ь8й
    @СергейМатвеев-ь8й ปีที่แล้ว +1

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

  • @SergiusBfg
    @SergiusBfg 5 หลายเดือนก่อน

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

  • @ВалерияМалышева-ь1в
    @ВалерияМалышева-ь1в 4 ปีที่แล้ว +1

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

  • @DeceptiRoma
    @DeceptiRoma 2 ปีที่แล้ว +1

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

  • @dual200611111988
    @dual200611111988 ปีที่แล้ว

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

  • @ES-ng3el
    @ES-ng3el 11 หลายเดือนก่อน

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

  • @Михаил-я8ф8ю
    @Михаил-я8ф8ю 2 ปีที่แล้ว

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

  • @katerynariaboshapko4037
    @katerynariaboshapko4037 3 ปีที่แล้ว

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

  • @Всепровсе-б2х
    @Всепровсе-б2х 3 ปีที่แล้ว

    Благодарю

  • @sseeer-r5d
    @sseeer-r5d 3 ปีที่แล้ว

    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 9 หลายเดือนก่อน

      Разобрался?