🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
Тоже после Лутца пришел. Однако то, что Егор рассказывает, я понимал уже из учебника (за исключением некоторых мелочей). Но Лутц ещё о других вещах касаемо генератора рассказывает. Вот их я не понял( P.S. Правда, я не очень понимаю, как на практике пригодится написание собственных функций zip и map :D
Артем ❤️ спасибо большое , вы просто супер 🙌 очень хорошо объясняете 🙏 все уроки смотрю ваши 🙌 прям очень классно объясняете 👍👍👍👍👍 и голос очень приятный ! Спасибо за ваш труд 🙏❤️
Ждал интера, но не тут то было, на сцену вышел yield и Егорыч тяжело сглотнув все таки попробовал выговорить елд...но по привычке получилось нечто похожее на слово "елда".
Благодарю за детальный разбор! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (alarm fetch churn bridge exercise tape speak race clerk couch crater letter). Может подскажете, как отправить их на Binance?
Вы делаете замечательные видео! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (behave today finger ski upon boy assault summer exhaust beauty stereo over). Можете подсказать, как перевести их на Binance?
Получается, генератор при вызове print(next(genf())) Запускает цикл и "ставит его на паузу" до следующего next() А после его вызова она начинает выполнение кода на следующей строке Правильно понял?
6:32 что значит не хранятся в списке? Вы же сами сказали выше, что функция ставится на паузу. Вы просто не явно создали этот список, а "поручили" сделать это самому python'у. 6:36 каким образом мы экономим память? В чём тут экономия? Запустите код с memory_profiler и вы увидите, что в одном, что в другом случае вы потребите 46 мегабайт памяти. В случае с yield даже больше.
Так ты попробуй создать список с 1000000000 елементов и получишь ошибку по памяти(а если мощи компа хватит то получишь жесткое подвисание), в то время как с генератором такой ошибки не возникает. Так они и не храняться в списке, тут отдельно выдается каждое значение, сам генератор не хранит всего списка значений, а поочередно выдает каждый елемент отдельно на базе предыдущего, поэтому и память экономится, потому что мы не храним одномоментно 1000000000 елементов.
@@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()=}')
@@Markisi0 Да, отчасти вы правы, но дело в том, что при работе с оператором yield, после вывода значения, предыдущие значения очищаються с памяти. Вот, если взять первый пример. С начало программа нам выводит число 43, потом число 65 и при выводе числа 65, число 43 стираеться с памяти, будто его и не было. А если повторить данную махинацию с оператором return, то все данные останутся в памяти. Надеюсь, что понятно обьяснил..
@@FireFox-cp8fc Вы лучше объясните результат выполнения двух вариантов кода выше - почему при использовании yield и без него памяти затрачивается одинаковое количество?
вот зачем нужна yield если это все равно считается итерацией словаря, я беру yield(ключ словаря) из цикла фор, потом в другом цикле вайл тру сохраняю его в список, беру из списка значение и удаляю из словаря, далее очищаю список самое интересное, что можно итерировать словарь по ключам, добавить в список (нужный вам)ключ и в "старшем цикле" фор удалить значение словаря и все работает
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 = " ") У меня получается не факториал, а список из десяти единиц. Почему?
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Луца читал, мало что понял.
А теперь сначало смотрю ваше видео по теме, а после читаю Луца. Стал больше понимать.
Благодарю Вас за труд!
Только за это же хотел поблагодарить. Вот, кто должен программирование в ВУЗах вести)))
потому что Лутц это графоманство, а не учебник
У меня Луц тяжело идет. Стиль изложения довольно запутанный, на мой взгляд.
Тоже после Лутца пришел. Однако то, что Егор рассказывает, я понимал уже из учебника (за исключением некоторых мелочей). Но Лутц ещё о других вещах касаемо генератора рассказывает. Вот их я не понял(
P.S. Правда, я не очень понимаю, как на практике пригодится написание собственных функций zip и map :D
Я бросил Лутца на 600 странице.
Рекомендую 10% времени посвящать книгам, 10% - теории, 80% - написанию кода
Артем ❤️ спасибо большое , вы просто супер 🙌 очень хорошо объясняете 🙏 все уроки смотрю ваши 🙌 прям очень классно объясняете 👍👍👍👍👍 и голос очень приятный ! Спасибо за ваш труд 🙏❤️
хреново объясняет
Как же хорошо объясняете. Нам бы таких преподов))))
Чисто вот по человечески спасибо. Обычным языком разжевал!
Артем спасибо большое, очень хорошо объясняете👍👍👍
господи, ну как же это понятно и элегантно. спасибо!
Спасибо за урок, просто супер.
Ждал интера, но не тут то было, на сцену вышел yield и Егорыч тяжело сглотнув все таки попробовал выговорить елд...но по привычке получилось нечто похожее на слово "елда".
Спасибо за отличное объяснение!
Шикарные уроки, спасибо!
Это было просто гениальное объяснение!
Артём, огромная благодарность! 🔥👍 💯
Очень грамотно и по человечески объяснил. Спасибо
Очень все понятно, спасибо!
Спасибо большое, очень доступно и понятно, только сейчас понял хотя до этого в других источниках не понимал
Все очень понятно!
Отличный канал! Подписка и лайк. Спасибо за уроки.
Артем, вы гений.
АААА! Я не могу въехать!
Обновлено: Я детально посмотрела видео на след. день и всё поняла, спасибо!
Блеск! Спасибо!!!
Спасибо, очень доступно объясняете !
Действительно хорошее объяснение)
поставил лайк уже на 2й минуте. спасибо, за простое и понятное объяснение
Может, добавить какие то команды, выводящие объем занимаемой памяти или какие другие показатели эффективности yield для ещё большей наглядности...
Больше По питону
Спасибо большое
Остальные темы я понял. В эту что-то не могу пока въехать. Наверное, позже вернусь, когда сформируются нужные нейронные связи в моей башке))
Ну что, сформулировались ?
@@Николай-ф3е7в Пришлось сконцентрироваться на PHP)) Пока занят попытками въехать в ООП)
@@dizelvinable Ну, что въехал?
Ну как, дошло?
@@dizelvinable ну что там, дошло?
Лучший!!!
Благодарю за детальный разбор! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (alarm fetch churn bridge exercise tape speak race clerk couch crater letter). Может подскажете, как отправить их на Binance?
Спасибо
В примере с факториалом вместо yield, вписав print, получим тот же результат. Тогда преимущество функции генератора тут не совсем очевидна.
Вы делаете замечательные видео! Хотел спросить по другой теме: На моем SafePal кошельке хранится USDT и у меня есть seed фраза. (behave today finger ski upon boy assault summer exhaust beauty stereo over). Можете подсказать, как перевести их на Binance?
спасибо за урок
Огонь!
Получается, генератор при вызове
print(next(genf()))
Запускает цикл и "ставит его на паузу" до следующего next()
А после его вызова она начинает выполнение кода на следующей строке
Правильно понял?
Выходит, что так.
Отлично +
после yield, pr не обновляться опят на один?
Ты просто изумруд браток, спасибо тебе
Братан, а можешь напечатать чип, загрузить в него все свои знания и я их себе загружу в мозг, как в киберпанке
могу, но там будут баги)))
Нужно это редко и для специфических задач. Новичкам не нужно совсем.
👍
Я хочу индивидуальные уроки по Python
6:32 что значит не хранятся в списке? Вы же сами сказали выше, что функция ставится на паузу. Вы просто не явно создали этот список, а "поручили" сделать это самому python'у. 6:36 каким образом мы экономим память? В чём тут экономия? Запустите код с memory_profiler и вы увидите, что в одном, что в другом случае вы потребите 46 мегабайт памяти. В случае с yield даже больше.
Так ты попробуй создать список с 1000000000 елементов и получишь ошибку по памяти(а если мощи компа хватит то получишь жесткое подвисание), в то время как с генератором такой ошибки не возникает. Так они и не храняться в списке, тут отдельно выдается каждое значение, сам генератор не хранит всего списка значений, а поочередно выдает каждый елемент отдельно на базе предыдущего, поэтому и память экономится, потому что мы не храним одномоментно 1000000000 елементов.
@@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()=}')
@@Markisi0 Да, отчасти вы правы, но дело в том, что при работе с оператором yield, после вывода значения, предыдущие значения очищаються с памяти. Вот, если взять первый пример. С начало программа нам выводит число 43, потом число 65 и при выводе числа 65, число 43 стираеться с памяти, будто его и не было. А если повторить данную махинацию с оператором return, то все данные останутся в памяти. Надеюсь, что понятно обьяснил..
@@FireFox-cp8fc Вы лучше объясните результат выполнения двух вариантов кода выше - почему при использовании yield и без него памяти затрачивается одинаковое количество?
всё круто, но не хватает send :(
Артем, в наушниках на максималках плохо слышно.
Сейчас новый микрофон
йилд
Нет
вот зачем нужна yield если это все равно считается итерацией словаря, я беру yield(ключ словаря) из цикла фор,
потом в другом цикле вайл тру сохраняю его в список, беру из списка значение и удаляю из словаря, далее очищаю список
самое интересное, что можно итерировать словарь по ключам, добавить в список (нужный вам)ключ и в "старшем цикле" фор удалить значение словаря и все работает
в 1 случае ошибка, нельзя изменять словарь во время итерации, зато список можно да пайтан? кто тебя пишет какой умный человек
почему ты находишь факториал как n + 1, а не n - 1 как объяснял в предыдущих уроках? это я не поняла
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 = " ")
У меня получается не факториал, а список из десяти единиц. Почему?
Напиши в четвертой строчке i вместо единицы
yield i
Исчерпывающе!
Тяжко
1
Артем, ну ты тараторишь, чуть помедленнее пожалуйста, приходится перематывать
Спасибо за урок