Шон Коннери на съемках фильма «Индиана Джонс и последний крестовый поход», Иордания, 1989 год.
Шон Коннери на съемках фильма «Индиана Джонс и последний крестовый поход», Иордания, 1989 год.
Шон Коннери на съемках фильма «Индиана Джонс и последний крестовый поход», Иордания, 1989 год.
? Генератор yield в Python / IT Resume
Вашей реакции на пост о yield можно только позавидовать. За нами теперь должок, удовлетворить ваш интерес и рассказать об этом загадочном генераторе. Мы посмотрим как это работает и где применимо.
Из примера в прошлом посте видно, что yield можно использовать в функции вместо return. И тогда получается генератор, который вычисляет не всё сразу, а генерирует элемент на ходу.
Итак, как же он работает? ?
Допустим, мы хотим получить квадраты чисел от 1 до 10. Мы могли бы создать список и с помощью append добавлять в него элементы, но мы заменим эту привычную конструкцию на yield (код на карточках)
? Что произошло?
Мы задали функцию-генератор squares(), а затем с помощью цикла for вывели элементы, вычисленные функцией.
У генераторов еще есть метод next(). Например, мы бы вызывали next(squares()), чтобы получить следующее значение. Но нам бы пришлось написать это 10 раз, так что лучше воспользуемся циклом.
Итак, при каждой итерации, Python запускал код до тех пор, пока не сталкивался с оператором yield. Затем он выдавал вычисленное значение, а функция, как бы “замораживалась” в этом состоянии, готовясь возобновить выполнение с этого же места.
Когда функция вызывается в следующий раз, выполнение продолжается с этого “замороженного” момента. И так продолжается до тех пор, пока генератор не будет исчерпан. Если после того, как генератор выдал все значения, вызвать его снова - получим ошибку StopIteration. Мы можем переопределить генератор, и тогда все начнётся заново.
? Где пригодится yield?
→ При генерации больших последовательностей - с помощью yield мы сохраним внушительный объем памяти.
→ При чтении больших файлов. Yield позволит пройтись по одной строке за раз, а не считывать весь файла целиком в память.
→ При создании пайплайнов обработки. Вы можете постепенно проходить все этапы для каждого элемента, а не обрабатывать все элементы сразу.
Примеры на карточках ?
? Таким образом, yield - мощный инструмент, который позволяет создавать генераторы, и получать значения на ходу. Порой, это делает его незаменимым при работе с объемными данными и файлами. Потренируйтесь использовать yield и убедитесь, как он может упростить ваш код и сохранить память!
#python@pylounge
#status_manga@mangaotaku
Манга Дикая любовь моей жены
Неформалам паукам разбили лицо на видео и заставили извиниться ?
Фулл видео в комментариях ??
Если ты так оставляешь машину! Оставляй хоть номер телефона блин