Step 3 (S-100215)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/24464/step/3

Step 3 (S-100215) 1.png

[00:00 - 00:16] однако для того чтобы написать модератору языке поэтому приходится использовать класса это очень сложный потому что даже такой простой итератор которой бы перебирал как случайных значение из диапазона 1 заднего с от 14 строк research намного же такой простой задачи можем ли мы сделать это как нибудь проще


[00:16 - 00:33] да на самом деле можем потому что в языке python существует генераторы генераторы это по сути функции в которых вместо слова return мы используем слово и при этом вместо того чтобы значение возвращать генерировать нам следующее значение давайте попробуем переписать наш модератор используя генератор


[00:33 - 00:51] режиссер описания генератор эта функция в нашем случае мы называем функция render генератора она принимает 1 аргумент к этот аргумент определяет сколько случайных чисел в диапазоне 0 1 мы бы хотели вывести затянут внутри цикла форму пишем что вы бы хотели к расовой 1 случайное значение из диапазона 0 1


Step 3 (S-100215) 2.png

[00:51 - 01:06] таким образом отличие генератора от обычной функции заключается в том что с помощью ключевого слова которые мы используем вместо кричала слова return мы можем вернуть значений из функции сразу несколько раз а спрашивают какое именно значение будет следующий мы будем именно с помощью функции next


[01:06 - 01:24] также важно понимать что интерпретатор смазать сразу на все тело функции я с ним встречаюсь хотя бы 1 раз на и тело функции слово ел то он понимает что эта функция является генератором а вызов генератора ведет себя не также к вызов обычной функции давайте сами создадим переменной gen в котором не сохранил результат вызова


[01:24 - 01:40] random же не right а значение например 3 давайте затем выводим на экран тип наших тип наши переменной john когда он выйдет на экраны в гимсе в том что наши времена когда мы за функции с ключевым словом внутри на возвращается в генератора


Step 3 (S-100215) 3.png

[01:40 - 01:56] это я к генератору примечателен тем что он знает целиком все тело нашей функции исполнение тело функции сейчас лишь тогда когда он попросил генератора следующий элемент просим он и что самое начало исполняют нашу функцию до 1 ключевого слова ялта


[01:56 - 02:15] кстати слово идиот он вернет значение наружу туда где мы вызывали функциональность но что самое главное когда мы возвращаем значением и также запоминаем и все состояние нашей функции чтобы затем когда вызовут на следующий раз мы продолжили исполнении сначала функции а с того места где мы до этого остановились


[02:15 - 02:31] если в какой то момент мы не найдем ключевое слово ел просим ошибку 100 протираем давайте рассмотрим на самом простом примере самый простой генератор который он должен вернуть всего 2 значения между возвращении значения мы поставим приняты


[02:31 - 02:47] и в конце после 2 я бы тоже постоянно 1 принято давать начало просто выделим нашу функцию увидимся в том что когда мы получаем объект генераторы код из тела функции даже еще не начинает исполняться давайте затем попасть в него 1 значение и распечатанного на экран


Step 3 (S-100215) 4.png

[02:47 - 03:04] убедимся в том что выполнив 71 процент из я вам верну значение единичке наружу затем когда мы раскомментировал 2 блок нашего кода вернуть 2 значение и вывести на экран увидимся в том что вы прошли 2 так и действительно вернули значение отводите


[03:04 - 03:20] я прям в 3 раз и выполним данный клад он действительно пройдет 3 чекпоинт вот мы увидим его в терминале однако он бросает ошибку 100 потеряешь таким образом с помощью генераторов языке python реализуется концепция отложенного исполнения


Step 3 (S-100215) 5.png

[03:20 - 03:37] продолжить исполнение функций лишь тогда когда в действительности понадобится следующее значение давайте вернемся к нашему примеру sunday не райдер так и по сути наша функциональных генератора который принимает качественным аргументом все что найдет она ка раз возвращает вам случайно значений в промежутках 0 1


[03:37 - 03:55] то что и делал до этого нас большой класс random числа используйте конструкцию мы передаем i в нашем генераторе и вы видимо и на экран весь в том что мы в действительности в или 3 случайных значений из промежутка 0 1


Step 3 (S-100215) 6.png

Step 3 (S-100215) 7.png

Step 3 (S-100215) 8.png

[03:55 - 04:10] таким образом генератора это удобный синтаксис написания итераторов вместо того чтобы подписать класс внутри которого обязательно нужно реализовать в америку и некст вы написали лишь 1 маленькую функцию которая принимала всего лишь 1 аргумент и вместо return использовал ключевое слово идеал


[04:10 - 04:28] тем самым давая понять что будет происходить сразу несколько значений которые нужно вернуть из функции а теперь вопрос для самых любопытных если мы заменили ключевые слова и черно ключевое слово идеал что же произойдет если мы используем слово внутри генератора важно понимать что генератор заканчивай исполнения тело функции ровно так даже


[04:28 - 04:46] когда я обычная функция заканчивает исполнения своего тела то есть если мы дошли до конца тело функции генератор понимаю что ты больше не сможет сварить конструкцию я вот он бросает ошибку 100 потирающего однако если генератор внутри тела функции встретив конструкцию return там также поймет что ему нужно прекратить свое исполнение и просто ошибку стать потерпевшим


[04:46 - 05:05] давайте внутри нашего генератор старых конструкций ветер вот здесь мы сможем убедиться в том что по charm подчеркивают подсвечивают давно области довоенном о том что данный код является недостижимым то есть это генератор или функции исполняли свое тело они бы никогда не добрались до этой строчки потому что мы уже используем ключевое слово


[05:05 - 05:20] запусти мы сможем убедиться в том что мы действительно 1 чекпойнт выдели 1 значение затем пошли 2 чекпойнт затем бросили ошибку 100 потирающего однако с ним будем использовать не простой конструкцией что нибудь рад что таки передадим


[05:20 - 05:36] тогда мы будем очень интересное поведение конструкции и терка данной используем тренера то что мы передали внутри конструкции будет сообщением внутри ошибки 100 потерпевшим давайте просто добавим здесь просто инструкции no more преданность то есть у нас закончились элементов


[05:36 - 05:55] запустить данный код мы видим очень интересным поведением или в с назло кстати раньше я бы дополнительное сообщение но оказывается который мы передали с помощью return генератор языке понятном такой удобный синтаксис в написании рефератов он ведет себя точно так же как и функцию но при этом с помощью конструкции ялта


[05:55 - 06:11] мы можем это 6 сразу несколько значений с функцией важно помнить что исполнение тело функции происходит лишь тогда когда мы вызываем next и происходит от 1 города до следующего а есть следующие я не нашел тогда он заканчивается исполнения и бросает ошибку 100 потеряешь