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

Поділитися
Вставка
  • Опубліковано 28 вер 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 років тому +215

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

    • @johnsmith-yk5vz
      @johnsmith-yk5vz 6 років тому +12

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

    • @zaemiel
      @zaemiel  6 років тому +11

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

    • @BSroad
      @BSroad 6 років тому +9

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

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

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

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

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

  • @denyspetryk4443
    @denyspetryk4443 4 роки тому +14

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

  • @alwayssmile3125
    @alwayssmile3125 6 років тому +51

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

    • @zaemiel
      @zaemiel  6 років тому +1

      Спасибо

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

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

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

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

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

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

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

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

  • @databox4279
    @databox4279 Рік тому

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

  • @Cappietroll
    @Cappietroll 6 років тому +12

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

    • @zaemiel
      @zaemiel  6 років тому

      Спасибо

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

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

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

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

  • @mrpjetrov378
    @mrpjetrov378 Рік тому

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

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

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

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

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

  • @osvab000
    @osvab000 3 роки тому +2

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

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

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

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

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

  • @talshynadilhan9453
    @talshynadilhan9453 Рік тому

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

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

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

  • @nitnatsnokk
    @nitnatsnokk 2 місяці тому

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

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

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

  • @ЕвгенийПронин-ы9э
    @ЕвгенийПронин-ы9э 5 років тому +1

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

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

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

  • @sashaperdunov2209
    @sashaperdunov2209 Рік тому

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

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

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

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

    спасибо

  • @fedyasavchuk1043
    @fedyasavchuk1043 5 років тому +2

    Спасибо!

  • @hey-rg9lk
    @hey-rg9lk 6 років тому +22

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

    • @bindera_zlaya_nata
      @bindera_zlaya_nata 6 років тому

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

  • @golotus
    @golotus 5 років тому +1

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

    • @zaemiel
      @zaemiel  5 років тому +1

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

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

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

  • @aliaskarisakov1147
    @aliaskarisakov1147 5 років тому +1

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

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

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

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

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

  • @9keepa
    @9keepa 5 років тому

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

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

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

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

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

  • @jeremiahBango
    @jeremiahBango 5 років тому +1

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

  • @Небагафича-ф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

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

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

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

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

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

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

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

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

  • @Всемогущийджон
    @Всемогущийджон 5 років тому

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

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

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

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

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

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

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

  • @6mak6beat6prodhorrorcore2
    @6mak6beat6prodhorrorcore2 2 роки тому

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

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

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

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

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

  • @imgnl
    @imgnl 6 років тому +5

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

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

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

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

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

  • @ОлегБудаев-г5п
    @ОлегБудаев-г5п 6 років тому +2

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

  • @igorkulibaba7287
    @igorkulibaba7287 6 років тому +1

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

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

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

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

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

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

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

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

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

  • @ДанилАджиев-ъ4б
    @ДанилАджиев-ъ4б 3 роки тому

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

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

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

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

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

  • @ДанилаДанила-ж8р
    @ДанилаДанила-ж8р 3 роки тому

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

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

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

  • @aleksandrsamuraev5028
    @aleksandrsamuraev5028 6 років тому +1

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

    • @zaemiel
      @zaemiel  6 років тому

      Спасибо

  • @Opdeit
    @Opdeit 6 років тому

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

    • @zaemiel
      @zaemiel  6 років тому

      о боже!

  • @бумагабумага-с8л
    @бумагабумага-с8л 5 років тому

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

  • @Opdeit
    @Opdeit 6 років тому

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

    • @zaemiel
      @zaemiel  6 років тому

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

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

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

  • @КоньЛюдоед-ф6ф
    @КоньЛюдоед-ф6ф 5 років тому

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

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

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