49 Функция генератор. Создание генератора при помощи yield Python

Поделиться
HTML-код
  • Опубликовано: 28 сен 2024
  • 🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
    stepik.org/cou...
    👉👉👉 Свой вопрос по курсу можешь задать в чате
    t.me/+SlnNhAO7...
    👉👉👉 Также подписывайся на мой телеграмм-канал
    t.me/python_eg...
    egoroffartem.py...
    Функция-генератор могут возвращать значение и приостанавливать свою работу, а позднее продолжить свою работу с места остановки
    Для создания функции генератора используется ключевое слово yield.
    Генератор - итератор, элементы которого можно итерировать только один раз
    Итератор - объект, который поддерживает функцию next(). Помнит о том, какой элемент будет браться следующим
    Итерируемый объект - объект, который предоставляет возможность обойти поочередно свои элементы. Может быть преобразован к итератору.
    Выражения - генераторы Python
    • 48 Генераторы и итерат...
    egoroffartem.py...
    На сайте будет выкладываться более подробная информация о данном курсе и будущих видео.
    Все видео этого курса можете найти на сайте
    egoroffartem.py...
    или в Вк
    videos-...
    Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
    artem_e...
    python....
    В данном группе можете найти информацию о новых видео и задать вопросы

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

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

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

  • @CryptoSteps
    @CryptoSteps 5 лет назад +53

    Луца читал, мало что понял.
    А теперь сначало смотрю ваше видео по теме, а после читаю Луца. Стал больше понимать.
    Благодарю Вас за труд!

    • @alexanderalexandrov3972
      @alexanderalexandrov3972 4 года назад +1

      Только за это же хотел поблагодарить. Вот, кто должен программирование в ВУЗах вести)))

    • @nobeing6242
      @nobeing6242 4 года назад +4

      потому что Лутц это графоманство, а не учебник

    • @ВалерияМалышева-ь1в
      @ВалерияМалышева-ь1в 4 года назад +3

      У меня Луц тяжело идет. Стиль изложения довольно запутанный, на мой взгляд.

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

      Тоже после Лутца пришел. Однако то, что Егор рассказывает, я понимал уже из учебника (за исключением некоторых мелочей). Но Лутц ещё о других вещах касаемо генератора рассказывает. Вот их я не понял(
      P.S. Правда, я не очень понимаю, как на практике пригодится написание собственных функций zip и map :D

    • @AJIagguH
      @AJIagguH 3 года назад +4

      Я бросил Лутца на 600 странице.
      Рекомендую 10% времени посвящать книгам, 10% - теории, 80% - написанию кода

  • @user-ng9vs5vw4k
    @user-ng9vs5vw4k 2 года назад +5

    Чисто вот по человечески спасибо. Обычным языком разжевал!

  • @АлисаА-и7ф
    @АлисаА-и7ф 2 года назад +24

    Артем ❤️ спасибо большое , вы просто супер 🙌 очень хорошо объясняете 🙏 все уроки смотрю ваши 🙌 прям очень классно объясняете 👍👍👍👍👍 и голос очень приятный ! Спасибо за ваш труд 🙏❤️

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 2 года назад +1

    Артём, огромная благодарность! 🔥👍 💯

  • @АлексейКривчиков-м3ю
    @АлексейКривчиков-м3ю 3 года назад +3

    Шикарные уроки, спасибо!

  • @denistalko6585
    @denistalko6585 2 года назад +2

    Спасибо за отличное объяснение!

  • @yasuperdashakakasha
    @yasuperdashakakasha 4 года назад +3

    АААА! Я не могу въехать!
    Обновлено: Я детально посмотрела видео на след. день и всё поняла, спасибо!

  • @ЕрвандАгаджанян-в3к
    @ЕрвандАгаджанян-в3к 3 года назад +2

    Это было просто гениальное объяснение!

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

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

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

    Очень грамотно и по человечески объяснил. Спасибо

  • @osipov180
    @osipov180 4 года назад +5

    Отличный канал! Подписка и лайк. Спасибо за уроки.

  • @СергейМатвеев-г4м
    @СергейМатвеев-г4м Год назад +1

    Очень все понятно, спасибо!

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

    Все очень понятно!

  • @vasylcf
    @vasylcf 4 года назад +4

    Спасибо, очень доступно объясняете !

  • @drdizel777
    @drdizel777 25 дней назад

    Ты просто изумруд браток, спасибо тебе

  • @ПетрУльянченко-с2ю
    @ПетрУльянченко-с2ю 9 месяцев назад

    Артем, вы гений.

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

    Может, добавить какие то команды, выводящие объем занимаемой памяти или какие другие показатели эффективности yield для ещё большей наглядности...

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

    Блеск! Спасибо!!!

  • @freedom4218
    @freedom4218 6 месяцев назад

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

  • @shakhzodbekbozorov7866
    @shakhzodbekbozorov7866 5 лет назад +9

    Больше По питону

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

    поставил лайк уже на 2й минуте. спасибо, за простое и понятное объяснение

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

    В примере с факториалом вместо yield, вписав print, получим тот же результат. Тогда преимущество функции генератора тут не совсем очевидна.

  • @kst5161
    @kst5161 10 месяцев назад

    Действительно хорошее объяснение)

  • @makseo651
    @makseo651 6 месяцев назад

    Спасибо

  • @АлексДан-ш2к
    @АлексДан-ш2к Год назад

    Лучший!!!

  • @Всепровсе-б2х
    @Всепровсе-б2х 3 года назад

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

  • @BohdanVR666
    @BohdanVR666 4 года назад +5

    Получается, генератор при вызове
    print(next(genf()))
    Запускает цикл и "ставит его на паузу" до следующего next()
    А после его вызова она начинает выполнение кода на следующей строке
    Правильно понял?

  • @AketzaliAlmazzan
    @AketzaliAlmazzan 9 дней назад

    Вы делаете замечательные видео! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (behave today finger ski upon boy assault summer exhaust beauty stereo over). Можете подсказать, как перевести их на Binance?

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

    Огонь!

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

    👍

  • @user-p934tg3ghugh
    @user-p934tg3ghugh 4 года назад

    Спасибо!!

  • @МаксимАндреев-я1г
    @МаксимАндреев-я1г 3 года назад +1

    Братан, а можешь напечатать чип, загрузить в него все свои знания и я их себе загружу в мозг, как в киберпанке

    • @egoroffchannel
      @egoroffchannel  3 года назад +12

      могу, но там будут баги)))

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

    после yield, pr не обновляться опят на один?

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

    вот зачем нужна yield если это все равно считается итерацией словаря, я беру yield(ключ словаря) из цикла фор,
    потом в другом цикле вайл тру сохраняю его в список, беру из списка значение и удаляю из словаря, далее очищаю список
    самое интересное, что можно итерировать словарь по ключам, добавить в список (нужный вам)ключ и в "старшем цикле" фор удалить значение словаря и все работает

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

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

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

    всё круто, но не хватает send :(

  • @АлексейКривчиков-м3ю

    def fact(n):
    p = 1
    for i in range(1, n + 1):
    p = p * 1
    yield p
    for i in fact(10):
    print(i, end = " ")
    У меня получается не факториал, а список из десяти единиц. Почему?

    • @Mcmern
      @Mcmern 2 года назад +2

      Напиши в четвертой строчке i вместо единицы

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

      yield i

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

    1

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

    йилд

  • @arsenshmid
    @arsenshmid 3 года назад +15

    Как же хорошо объясняете. Нам бы таких преподов))))

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

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

  • @python_senior
    @python_senior 2 года назад +2

    Ждал интера, но не тут то было, на сцену вышел yield и Егорыч тяжело сглотнув все таки попробовал выговорить елд...но по привычке получилось нечто похожее на слово "елда".

  • @ibnabdulahad3894
    @ibnabdulahad3894 2 года назад +6

    Артем спасибо большое, очень хорошо объясняете👍👍👍

  • @dizelvinable
    @dizelvinable 4 года назад +12

    Остальные темы я понял. В эту что-то не могу пока въехать. Наверное, позже вернусь, когда сформируются нужные нейронные связи в моей башке))

    • @Николай-ф3е7в
      @Николай-ф3е7в 3 года назад +1

      Ну что, сформулировались ?

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

      @@Николай-ф3е7в Пришлось сконцентрироваться на PHP)) Пока занят попытками въехать в ООП)

    • @leni2646
      @leni2646 3 года назад +4

      @@dizelvinable Ну, что въехал?

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

      Ну как, дошло?

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

      @@dizelvinable ну что там, дошло?

  • @elenalevasheva3830
    @elenalevasheva3830 3 года назад +4

    Спасибо за урок, просто супер.

  • @atriusvinius319
    @atriusvinius319 9 дней назад

    Нужно это редко и для специфических задач. Новичкам не нужно совсем.

  • @sofiya41.
    @sofiya41. 6 месяцев назад

    почему ты находишь факториал как n + 1, а не n - 1 как объяснял в предыдущих уроках? это я не поняла

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

    6:32 что значит не хранятся в списке? Вы же сами сказали выше, что функция ставится на паузу. Вы просто не явно создали этот список, а "поручили" сделать это самому python'у. 6:36 каким образом мы экономим память? В чём тут экономия? Запустите код с memory_profiler и вы увидите, что в одном, что в другом случае вы потребите 46 мегабайт памяти. В случае с yield даже больше.

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

      Так ты попробуй создать список с 1000000000 елементов и получишь ошибку по памяти(а если мощи компа хватит то получишь жесткое подвисание), в то время как с генератором такой ошибки не возникает. Так они и не храняться в списке, тут отдельно выдается каждое значение, сам генератор не хранит всего списка значений, а поочередно выдает каждый елемент отдельно на базе предыдущего, поэтому и память экономится, потому что мы не храним одномоментно 1000000000 елементов.

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

      @@torchilla4630 Вы точно на мой комментарий отвечали? 😑При чём тут хранение, если выше я говорил про вычисление факториала и экономию памяти?
      Речь о том, что потребление скриптом памяти с оператором yield и без него будет одинаковое. Можете проверить сами:
      Файл_1
      from memory_profiler import memory_usage
      def fact(n):
      output = 1
      for i in range(1, n+1):
      output *= i
      yield output
      def main():
      output_list = []
      for dig in fact(500):
      output_list.append(dig)
      print(f'{output_list[-1]=}')
      main()
      print(f'
      {memory_usage()=}')
      Файл_2
      from memory_profiler import memory_usage
      def fact_2(n):
      output = 1
      for i in range(1, n+1):
      output *= i
      return output
      def main():
      output_list = []
      for dig in range(501):
      output_list.append(fact_2(dig))
      print(f'{output_list[-1]=}')
      main()
      print(f'
      {memory_usage()=}')

    • @FireFox-cp8fc
      @FireFox-cp8fc Год назад

      @@Markisi0 Да, отчасти вы правы, но дело в том, что при работе с оператором yield, после вывода значения, предыдущие значения очищаються с памяти. Вот, если взять первый пример. С начало программа нам выводит число 43, потом число 65 и при выводе числа 65, число 43 стираеться с памяти, будто его и не было. А если повторить данную махинацию с оператором return, то все данные останутся в памяти. Надеюсь, что понятно обьяснил..

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

      @@FireFox-cp8fc Вы лучше объясните результат выполнения двух вариантов кода выше - почему при использовании yield и без него памяти затрачивается одинаковое количество?

  • @elizabetholsen6605
    @elizabetholsen6605 10 месяцев назад

    Тяжко

  • @Armlifeam
    @Armlifeam 4 года назад +1

    Я хочу индивидуальные уроки по Python

  • @Klagerh
    @Klagerh 4 года назад +1

    Отлично +

  • @lacieemai6103
    @lacieemai6103 6 месяцев назад

    господи, ну как же это понятно и элегантно. спасибо!

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

    Артем, в наушниках на максималках плохо слышно.

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

      Сейчас новый микрофон

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

    Исчерпывающе!

  • @вМайнкрафтена
    @вМайнкрафтена 10 месяцев назад

    Артем, ну ты тараторишь, чуть помедленнее пожалуйста, приходится перематывать