Уроки Python casts #10 - Что такое yield

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024
  • Мои курсы:
    Boosty:
    boosty.to/omol...
    Patreon:
    / karty-vsekh-41011404
    Что такое yield в Python. Смотрим на функции-генераторы. Для чего нужны функции-генераторы, чем они отличаются от обычных функций в Python. Чем они отличаются от списков. Когда использовать простые списки, а когда генераторы.
    Продолжение серии уроков по языку Python для начинающих. Серия посвящена отдельным темам по программированию на Python.
    ** ИСХОДНЫЙ КОД **
    Основных проектов доступен в Patreon:
    / iskhodnyi-kod-26640469
    ***
    ------
    🔷 Для донатов. Всегда очень признателен за это:
    www.donational...
    ------
    ★ Важно:
    Как читать Traceback Python:
    • Как читать Traceback P...
    Работа с ошибками на примере двух нерабочих парсеров:
    • Python: работа с ошибк...
    ★ Все серии Python casts:
    1 - Что вам нужно знать о Pip
    • Уроки Python Casts # 1...
    2 - Переменные окружения. Использование.
    • Уроки Python casts # 2...
    3 - Что означает *args, **kwargs
    • Уроки Python casts # 3...
    #4 - if __name __ == '__main__': что это значит
    • Уроки Python casts #4 ...
    #5 - Генераторы списков (List comprehension)
    • Уроки Python casts #5 ...
    #6 - Декораторы
    • Уроки Python casts #6 ...
    #7 - 5 приемов, о которых вы могли не знать
    • Уроки Python casts #7 ...
    #8 - Замыкания
    • Уроки Python casts #8 ...
    #9 - Что такое try... except...
    • Уроки Python casts #9 ...
    #10 - Что такое yield
    • Уроки Python casts #10...
    #11 - Как работает функция map()
    • Уроки Python casts #11...
    #12 - Как работает функция filter()
    • Уроки Python casts #12...
    #13 - Else у циклов For и While
    • Уроки Python casts #13...
    ★ Плейлисты:
    Django 2.x:
    • Уроки Django 2.x
    Flask:
    • Создание блога на Flas...
    Боты для Телеграма:
    • Telegram боты на Python
    Работа с API Вконтакте:
    • Работа с API Вконтакте...

Комментарии • 95

  • @toyetak
    @toyetak 6 лет назад +216

    Редкий случай , чтобы захотелось оставить комментарий к видео на RUclips. Уважаемый автор канала, спасибо вам огромное, за то, что вы находите время и имеете желание заниматься такой просветительской работой. Понятные примеры доступным языком, решение реальных задач, минимум воды в повествовании. Рад, что нашел этот канал на просторах сети. Так совпало, что большинство уроков что выходят в последнее время как раз на самые актуальные для меня темы. Я очень надеюсь, что вы, Олег, найдете возможность и дальше радовать свою аудиторию столь полезным контентом. Будь то короткие заметки о полезных вещах или целые курсы на большие темы. Ещё раз СПАСИБО!

    • @johnsmith-yk5vz
      @johnsmith-yk5vz 6 лет назад +12

      и от меня тоже : Спасибо, просто Спасибо... за весь труд)

    • @zaemiel
      @zaemiel  6 лет назад +11

      Спасибо. Рад, что вам понравилось

    • @BSroad
      @BSroad 6 лет назад +9

      присоединяюсь и подписываюсь под каждым словом! Спасибо!

    • @visp6883
      @visp6883 3 года назад

      ну как, стал прогером?

    • @toyetak
      @toyetak 3 года назад

      @@visp6883 а кто вам сказал что это была цель? Большинство видео которые я смотрел на этом канале нужны мне были для конкретной цели. Эти цели были достигнуты во многом благодаря труду автора канала. Профессия у меня совершенно другая, но помощь была неоценима. За что ему ещё раз благодарность.
      А ваш сарказм совершенно неуместен.

  • @databox4279
    @databox4279 Год назад +1

    Единственное видео где на нормальных примерах объясняется то, когда надо применять генераторы. Низкий Вам поклон, Олег, за ваши труды.

  • @nyrouxhide91
    @nyrouxhide91 2 года назад +1

    Автор хорош, простым языком за 10 минут объяснил то что не мог понять месяц.

  • @megaShvil
    @megaShvil Год назад +1

    Самое лучшее объяснения генераторов. Спасибо огромное

  • @mrpjetrov378
    @mrpjetrov378 Год назад

    За объяснение где это предпочтительней - прям респект респект.

  • @ВладимирПлужников-п4щ

    День назад смотрел видео другого автора и практически ничего не понял. Здесь же въехал с первого раза. Признателен Олегу. Наглядно и доходчиво.

  • @dmitrii_kotoff
    @dmitrii_kotoff Год назад

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

  • @semasema9004
    @semasema9004 Год назад +1

    Отличное объяснение. Простое, понятное и наглядное. Спасибо!

  • @stanislavkalashnikov7170
    @stanislavkalashnikov7170 2 года назад +1

    Спасибо за понятное и лаконичное объяснение. Ваш труд делает жизни множества людей проще. Виртуально жму Вам руку.

  • @PSS4443
    @PSS4443 4 года назад +14

    Олежка молодец объясняешь как настоящий учитель а не препод. Когда на собеседовании меня спросили как изучал python, ответил по твоим урокам они там слюной изошлись все. Больше бы таких как ты мир бы стал лучше. Благодарю тебя ;) разживусь денежкой обязательно проданатчу тебя .....

  • @alwayssmile3125
    @alwayssmile3125 6 лет назад +51

    Мужик ты просто бог объяснений!

    • @zaemiel
      @zaemiel  6 лет назад +1

      Спасибо

  • @golden_horde
    @golden_horde 3 года назад +1

    Года полтора назад смотрел ничего не понял, а щас смотрю всё очень доступно объясняет

  • @vladimirkulakov8667
    @vladimirkulakov8667 3 года назад +1

    а вот я и до функций-генераторов дотянулся! Спасибо за отличную подачу материала!

  • @siberiasoundsystem9134
    @siberiasoundsystem9134 2 года назад +1

    Очень понятные объяснения!

  • @Cappietroll
    @Cappietroll 6 лет назад +12

    огромнейшее спасибо за материал и подачу!! Понятно, конкретно, ясно и правильно. Низкий поклон, от всей души!

    • @zaemiel
      @zaemiel  6 лет назад

      Спасибо

  • @AlexeyZubkov
    @AlexeyZubkov Год назад +1

    Спасибо. Я этот yield часто вижу в функциях которые дробят списки на n-блоки типа def chunks(lst, n):
    for i in range(0, len(lst), n):
    yield lst[i:i + n]

  • @andrewkrivoshein123
    @andrewkrivoshein123 2 года назад +1

    Спасибо, очень нужный пример использования вы привели

  • @act0r399
    @act0r399 4 года назад

    Реально, никто мне не объяснял так подробно + примеры, которые дают ясность когда, что и как. Благодарю)

  • @gorkya
    @gorkya 2 года назад +1

    спасибо большое за видео, всё очень понятно!

  • @Dmitrii74
    @Dmitrii74 3 года назад

    Спасибо, особенно за то, что объясняете где это может понадобиться.

  • @volodymyr9400
    @volodymyr9400 5 лет назад +3

    Нереально крутой канал. Все четко и по делу, нет воды и прочей туфты. Спс за качественный контент!!!

  • @osvab000
    @osvab000 3 года назад +2

    Олег, как обычно: лаконично и доходчиво. Не понимаю дюжину - поставивших дизлайки.

  • @ДанилАджиев-ъ4б
    @ДанилАджиев-ъ4б 4 года назад

    В нейронках генераторы используются очень часто. Налету генерируют часть данных и подают на вход сети. Виде зачетное, спасибо!

  • @nitnatsnokk
    @nitnatsnokk 4 месяца назад

    Отличный ролик

  • @sashaperdunov2209
    @sashaperdunov2209 Год назад

    Красава Олежа

  • @talshynadilhan9453
    @talshynadilhan9453 Год назад

    Огромное спасибо!

  • @ДанилаДанила-ж8р
    @ДанилаДанила-ж8р 3 года назад

    Отлично объясняете Олег. Спасибо.

  • @vladimirkulakov6126
    @vladimirkulakov6126 3 года назад

    Спасибо! Дошёл таки до таких ньюансов. Отличное видео!

  • @slime_llove
    @slime_llove 4 года назад

    Харош мужик. Все понятно объяснил

  • @Kersmaik
    @Kersmaik 3 года назад

    Спасибо за лучшие пояснения по языку python!

  • @ОлегБудаев-г5п
    @ОлегБудаев-г5п 6 лет назад +2

    Спасибо за ваши усилия!

  • @golotus
    @golotus 6 лет назад +1

    Присоединяюсь ко всем положительным вышесказанным комментариям. Замечательные примеры и их объяснения. Вычеркнул из списка тем на изучения сразу три пункта - yield, next, generator. Разумеется надо бы поучится их составлять, но после разжеванного материала не составит никаких трудностей.
    В комментариях так же нашел тему, которую интересно было бы послушать, так же оставлю вам оставшиеся в моем списке.
    1. async/await
    2. Расширенные генераторы
    3. threading
    4. callback
    5. contextvars

    • @zaemiel
      @zaemiel  6 лет назад +1

      Добрый вечер, спасибо за отзыв.
      По асинхронности я начал серию - следите за обновлениями. На все вопросы за исключением threading и contextvars я в ней отвечу. По contexvars пока в планах пока даже не рассматривал (уж очень тема специальная и в целом относительно низкоуровневая).

    • @golotus
      @golotus 6 лет назад

      @@zaemiel Уже приступил к изучению с азов о socket, ютуб любезно решил скрыть от меня полезные знания. Огромное спасибо, Олег, как за труды, так и за ваше терпение отвечать/читать комментарии и что самое главное слушать их.

  • @Руссофобзатевающийрусофобию

    Я помню пример использования yield для программирования пульта для телевизора. Переключение каналов.
    И еще. Я думаю что кроме функции next() должна быть и функция preview().Ибо это логично.

  • @Ruf4eg
    @Ruf4eg 6 лет назад

    You are the god of explanations :D , a huge thank you and respect Oleg

  • @LordBott
    @LordBott 4 года назад

    Это лучшее объяснение, спасибо)

  • @RuslanKhamidoullin
    @RuslanKhamidoullin 2 года назад

    спасибо

  • @incontext8335
    @incontext8335 3 года назад

    спасибо огромное!!!

  • @envergurbanov9572
    @envergurbanov9572 4 года назад

    Спасибо большое.

  • @fedyasavchuk1043
    @fedyasavchuk1043 5 лет назад +2

    Спасибо!

  • @imgnl
    @imgnl 6 лет назад +5

    Спасибо, Олег!

  • @igorkulibaba7287
    @igorkulibaba7287 6 лет назад +1

    Очень уверенно, спасибо!

  • @aliaskarisakov1147
    @aliaskarisakov1147 5 лет назад +1

    лучший..... просто лучший

  • @mlpython1089
    @mlpython1089 2 года назад

    range цикла for принимает/выдаёт целые значения. Вместо range можно написать генератор, который выдает float.

  • @ЕвгенийПронин-ы9э
    @ЕвгенийПронин-ы9э 6 лет назад +1

    Лучший гайд канал по питону. Спасибо, Олег.

  • @romansokolov9074
    @romansokolov9074 2 года назад

    А вот, кстати, поиск файлов, как минимум, в проводнике винды работает же как генератор. Хороший пример, чтобы понять в чем отличие от вываливания всего списка в конце поиска.

  • @glowworm3525
    @glowworm3525 4 года назад

    На другом языке пришлось реализовывать генератор с возвратом управления, а тут все лаконично:)

  • @amigo4884
    @amigo4884 3 года назад

    Я бы использовал while n > 0 в первых примерах. А так, всё круто!

  • @aleksandrsamuraev5028
    @aleksandrsamuraev5028 6 лет назад +1

    Хорошее видно!)

    • @zaemiel
      @zaemiel  6 лет назад

      Спасибо

  • @Небагафича-ф9л
    @Небагафича-ф9л 6 лет назад +11

    Генераторы часто используются в асинхроных корутинах. Глядишь и до асинхронных движков доберемся

    • @zaemiel
      @zaemiel  6 лет назад +4

      coroutine - и есть генераторы, subroutine - обычные функции. В Python нет формального закрепления понятию coroutine, а аналогичную функцию как раз выполняют генераторы.

    • @Небагафича-ф9л
      @Небагафича-ф9л 6 лет назад +1

      Если верить tornado, то корутины могут быть основаны не только на фун. генераторах но и на конструкции async await
      Python 3.5 introduces the async and await keywords (functions using these keywords are also called “native coroutines”). Starting in Tornado 4.3, you can use them in place of most yield-based coroutines (see the following paragraphs for limitations).

    • @Небагафича-ф9л
      @Небагафича-ф9л 6 лет назад

      Почитайте PEP 492 он определил(закрепил) coroutine как часть языка.
      www.python.org/dev/peps/pep-0492/

    • @zaemiel
      @zaemiel  6 лет назад +1

      Мне вообще кажется, что мы с вами говорим об одном и том же разными словами.
      Раздел Coroutine object methods.
      Coroutines are based on generators internally, thus they share the implementation
      Ок, они закрепили формально понятие coroutine

  • @hey-rg9lk
    @hey-rg9lk 6 лет назад +22

    ну пора и async/await объяснять

    • @bindera_zlaya_nata
      @bindera_zlaya_nata 6 лет назад

      нормально обьяснения не встречал )) так что до всех дошло

  • @9keepa
    @9keepa 6 лет назад

    автор спасибо тебе! очень доходчиво и понятно! а самое главное ты указал где это обычно применяется! из ходя из этого все стало понятно!

  • @SHlNJlKARl
    @SHlNJlKARl 4 года назад

    Чудесное объянсение. Ешё вроде генераторы можно использовать для ленивых вычислений, если я не ошибаюсь

  • @RuchejAlex
    @RuchejAlex 2 года назад

    Автор, ты не упоминул, что делать с ошибкой, когда в генераторе кончатся данные.

  • @jeremiahBango
    @jeremiahBango 5 лет назад +1

    Только один момент ты не рассказал. Что при вызове генератора посредством next он работает до yield, а n-1 остаётся на следующее обращение. Или это работает не так?

  • @hqier2652
    @hqier2652 5 лет назад

    все четко объясняешь , продолжай в том же духе

  • @AlexandrSpirit
    @AlexandrSpirit 4 года назад

    Не понятно с примером поиска на сайте
    Если пользователю нужно вывести первые 50, или от список от 50 до 100 товаров, то не проще ли запрос к базе соответствующий написать - не всё выдавать, а только нужный диапазон?

    • @kuptsov1
      @kuptsov1 2 года назад

      Не то чтобы проще, а именно так и делают. Никто не делает это через генераторы ); Генераторы могут подойти для генерации данных (рандомных или еще по какому-то алгоритму), но выбирать из базы на их основе - это плохая тема.

  • @Всемогущийджон
    @Всемогущийджон 5 лет назад

    Спасибо за видео. Прочитал книгу и не понял. Просмотрев ваш видеоролик понял эту тему.

  • @leomysky
    @leomysky 4 года назад

    Так как комменты пишу под роликами исключительно для продвижения канала, то расскажу, что в этом ролике Олег не использует звук 'th'
    Из-за этого его 'pyTHon casts' превратились в "пайТон кастс"
    В предыдущих роликах он так не делал
    Это не упрёк, а так, наблюдение
    Ибо в первом ролике вообще "питоний" пакетный менеджер
    Дико доставляет авторская манера повествования
    Видно, что получает удовольствие не только от того, что учит кого-то чему-то
    Но и потому, что учит этому так и тому, как и чему хочет он, не загоняя себя в рамки программы/учебного плана

  • @dmitryponyatov2158
    @dmitryponyatov2158 5 лет назад

    а есть видео реализации (синтаксических или бинарных) парсеров на генераторах?

    • @zaemiel
      @zaemiel  5 лет назад

      нет, я пока не делал

  • @бумагабумага-с8л
    @бумагабумага-с8л 5 лет назад

    Здравствуйте.Я посмотрел ваше видео и у меня есть вопрос.Что нужно написать, что б так-же само рандомно появилось одно из 3 предложений (знаю не по теме).Например print ("1предл.", "2 предл.", "3предл.").Как сделать что б вывелось только одно из трёх предложений?

  • @sashasashovic91
    @sashasashovic91 2 года назад

    Надо проверять что n>0 до работы с n .

  • @MortalKombatSector
    @MortalKombatSector 2 года назад

    мне постоянно выдает вот такое или подобное, ошибок нет и что это не понятно

  • @Opdeit
    @Opdeit 6 лет назад

    из базы то эти данные тоже надо вытянуть)

  • @oskabarpablo4363
    @oskabarpablo4363 5 лет назад

    У Генератор есть одна притягательная особенность: упражняясь с ним в общественном месте, вы обязательно привлечете внимание окружающих. Вот сейчас сестра показывает мне Генератор и корчит рожи. Какой низкий уровень культуры. Да куда нам в будущее рваться, с настоящим бы поладить, но что поделать, такова жизнь. Не буду забегать вперед, пытаться философствовать, пожалуй пойду посмотрю я кинофильм, где в главной роли Генератор. Приятная у нас беседа получается. Рад, что удалось поговорить. Хорошо. Если у вас есть Генератор, он от вас никогда не уйдет. Я бы просто смирился и жил с этим дальше. Вот так вот, господа. Разрыв мозга, или что они курят? Может быть Генератор? Правда, может я, хммм, сильно старомоден. Американцы до сих пор не понимают некоторые вещи, на всякого мудреца довольно простоты, или, как говорят на Руси, на всякий хитрый Генератор найдется Генератор винтом. Господин S. в недоумении: «Не могу понять, в чем дело. Я вижу, что Генератор носит мое имя, мое лицо и мое пальто, и что Генератор посвящаются стихи, подписанные «для тебя» и отправленные на мой почтовый адрес». Никто никогда не имел столько названий, сколько их есть у Генератор: «Лик Земли», «Генератор Востока», «Драгоценная жемчужина», «Сияющая точка земного шара». Генератор - не единственная связь человека с человеком. А вот «Ротаренег» - это Генератор наоборот.

  • @6mak6beat6prodhorrorcore2
    @6mak6beat6prodhorrorcore2 2 года назад

    Или я так туго соображаю, или эта функция 'yield' слишком сложная. Если честно, то я нихрена не понял.

  • @Opdeit
    @Opdeit 6 лет назад

    и не понял, что мешает при поиске данных в файле, прервать обычный цикл и вывести результат и если нужно можно и дальше продолжить искать

    • @zaemiel
      @zaemiel  6 лет назад

      увы, суть объяснения до вас, похоже, не дошла.
      Это видео не про поиск, а про работу генераторов. Про поиск - это всего лишь жалкая аналогия или пример, просто чтобы проиллюстрировать суть работы генератора.
      Или, если хотите - это создание еще одной ассоциации того, чего вы еще не знаете с тем, что уже знаете.

  • @КоньЛюдоед-ф6ф
    @КоньЛюдоед-ф6ф 5 лет назад

    Фуф. спасибо большое.