Python Academy
48.6K subscribers
1.13K photos
2 videos
385 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
Download Telegram
Функция itertools.cycle

В пайтон есть классный модуль itertools для создания собственных итераторов. Функции данного модуля довольно эффективны в работе, поэтому их часто используют в реальных проектах.

Сегодня мы бы хотели показать вам функцию cycle() из itertools. Данная функция принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта. Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элементы.

К примеру, функция cycle() из последовательности ['red', 'white', 'blue'] генерирует повторяющуюся бесконечную. Но важно при проходе при итерации по такому итератору предусмотреть выход из цикла (а не как у нас в первом случае с colors:). Так как это итератор, то мы можем использовать его для получения значений через функцию next(colors).

Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.

#генераторы #itertools
👍461👎1
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
👍285🔥3
Разница между генераторными выражениями и генераторами коллекций

Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.

Распечатав переменные, можно заметить, что значением переменной a является список, а переменная x хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

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

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

#генераторы
👍36👎1
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций. 

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

#генераторы
👍33👎41🔥1
Генераторы

Функции-генераторы выглядят как и обычные, но вместо return содержат выражения с ключевым словом yield для последовательного генерирования значений.

Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции next или циклом for.

Если генератору больше нечего возвращать, то будет вызвано исключение StopIteration. В целом, генератор — это особый, более изящный случай итератора.

#генераторы
👍30👎2🔥1
Корутины

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

Обратите внимание на то, как было использовано ключевое слово yield. При таком написании создаётся не генератор, а корутина, что позволяет не просто генерировать значения, но и принимать их.

Функция работает так: при отправке значения через метод send локальная переменная name принимает его, а далее значение подставляется в строку и выводится на экран.

#генераторы #корутины
🔥26👍18👎4
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
👍34
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций. 

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

#генераторы
👍16
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
7👍6😱1
Генераторы

Функции-генераторы выглядят как и обычные, но вместо return содержат выражения с ключевым словом yield для последовательного генерирования значений.

Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции next или циклом for.

Если генератору больше нечего возвращать, то будет вызвано исключение StopIteration. В целом, генератор — это особый, более изящный случай итератора.

#генераторы
👍3👎2😱1
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
👍31
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций. 

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

#генераторы
👍10😱1
Функция itertools.cycle

В пайтон есть классный модуль itertools для создания собственных итераторов. Функции данного модуля довольно эффективны в работе, поэтому их часто используют в реальных проектах.

Сегодня мы бы хотели показать вам функцию cycle() из itertools. Данная функция принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта. Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элементы.

К примеру, функция cycle() из последовательности ['red', 'white', 'blue'] генерирует повторяющуюся бесконечную. Но важно при проходе при итерации по такому итератору предусмотреть выход из цикла (а не как у нас в первом случае с colors:). Так как это итератор, то мы можем использовать его для получения значений через функцию next(colors).

Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.

#генераторы #itertools
👍162
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
👍41
Генераторные выражения и списковые включения

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

Если вывести переменные, то видим, что значением переменной l является список, а переменная g хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций. 

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

#генераторы
👍10😱2
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
😱10
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
👍6😱3
Корутины

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

Обратите внимание на то, как было использовано ключевое слово yield. При таком написании создаётся не генератор, а корутина, что позволяет не просто генерировать значения, но и принимать их.

Функция работает так: при отправке значения через метод send локальная переменная name принимает его, а далее значение подставляется в строку и выводится на экран.

#генераторы #корутины
👍14🔥31
Функция itertools.cycle

В пайтон есть классный модуль itertools для создания собственных итераторов. Функции данного модуля довольно эффективны в работе, поэтому их часто используют в реальных проектах.

Сегодня мы бы хотели показать вам функцию cycle() из itertools. Данная функция принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта. Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элементы.

К примеру, функция cycle() из последовательности ['red', 'white', 'blue'] генерирует повторяющуюся бесконечную. Но важно при проходе при итерации по такому итератору предусмотреть выход из цикла (а не как у нас в первом случае с colors:). Так как это итератор, то мы можем использовать его для получения значений через функцию next(colors).

Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.

#генераторы #itertools
👍4
Делегирующие генераторы

Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.

А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.

Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.

Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.

#генераторы
🔥43