Выражения-генераторы в Python с примерами

В этом уроке вы узнаете о выражениях-генераторах в Python для создания объекта-генератора.

Содержание

Что такое выражения-генераторы в Python?

Выражение-генератор в Python — это выражение, которое возвращает объект-генератор. По сути, функция-генератор — это функция, которая содержит оператор доходности и возвращает объект-генератор.

Например, следующее определяет функцию-генератор:

def squares(length):
    for n in range(length):
        yield n ** 2

Функция генератора квадратов возвращает объект-генератор, который создает квадраты целых чисел от 0 до длины — 1.

Поскольку объект-генератор является итератором, вы можете использовать цикл for для перебора его элементов:

for square in squares(5):
    print(square)

Выход:

0
1
4
9
16

Выражение-генератор предоставляет вам более простой способ вернуть объект-генератор.

В следующем примере определяется выражение-генератор, которое возвращает квадраты целых чисел от 0 до 4:

squares =(n** 2 for n in range(5))

Поскольку квадраты являются объектом-генератором, вы можете перебирать его элементы следующим образом:

for square in squares:
    print(square)

Как видите, вместо использования функции для определения функции-генератора вы можете использовать выражение-генератор.

Генераторное выражение похоже на понимание списка с точки зрения синтаксиса. Например, оно также поддерживает сложные синтаксисы, включая:

  • оператор if
  • несколько вложенных циклов
  • вложенные comprehensions.

Выражение-генератор использует круглые скобки() вместо квадратных скобок [].

Сравнение выражения-генератора и понимания списка

Ниже показано, как использовать  list comprehension для генерации квадратов чисел от 0 до 4:

square_list = [n** 2 for n in range(5)]

А здесь определяется генератор квадратов чисел:

square_generator =(n** 2 for n in range(5))

1) Синтаксис

С точки зрения синтаксиса, выражение-генератор использует круглые скобки(), тогда как  list comprehension использует квадратные скобки [].

2) Использование памяти

  • Понимание списка возвращает список, а выражение-генератор возвращает объект-генератор. Это означает, что понимание списка заранее возвращает полный список элементов. Однако выражение-генератор возвращает список элементов по одному на основе запроса.
  • Понимание списка является активным, тогда как выражение генератора является ленивым. Другими словами, понимание списка сразу создает все элементы и загружает их все в память. И наоборот, выражение-генератор создает один элемент на основе запроса. Он загружает в память только один элемент.

3) Iterable или iterator

  • Понимание списка возвращает итерируемый объект. Это означает, что вы можете перебирать результат понимания списка снова и снова.
  • Выражение-генератор возвращает итератор, особенно ленивый итератор. Это становится утомительно, когда вы завершаете итерацию.
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *