«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как рентабельность и доходность работают вместе в генераторах Python 3.3?

Как рентабельность и доходность работают вместе в генераторах Python 3.3?

Опубликовано 1 ноября 2024 г.
Просматривать:225

How Do Return and Yield Work Together in Python 3.3 Generators?

Совместное использование Return и Yield в генераторах Python

В Python 2 оператор return внутри функции-генератора, которая также использовала доходность, приведет к ошибка. Однако в Python 3.3 произошло небольшое изменение.

Демонстрация кода

Рассмотрим следующий код Python 3.3:

def f():
  return 3
  yield 2
  
x = f()
print(x.__next__())

Объяснение

В этом коде функция f включает в себя как оператор возврата, так и оператор выхода. При вызове функции сначала выполняется оператор return и возвращается значение 3. В результате оператор урожайности не выполняется.

Когда генератор x повторяется путем вызова его метода next, возникает исключение StopIteration со значением 3. Это означает, что итератор генератора исчерпан, и значение, возвращаемое оператором return, доступно как атрибут value исключения.

Новый механизм в Python 3.3

Согласно PEP 380 , такое поведение — новая функция, представленная в Python 3.3. Это эквивалентно записи:

def f():
  yield 3
  raise StopIteration

Пример с Yield from

Следующий пример демонстрирует, как это поведение влияет на генераторы, делегированные с использованием синтаксиса Yield from:

def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

# g is still a generator so we need to iterate to run it:
for _ in g():
    pass

В этом случае выход из инструкции делегируется генератору f. Поскольку f возвращает значение, но больше не имеет операторов доходности, выводится значение 1. Однако оператор доходности 2 в f не выполняется.

Заявление о выпуске Эта статья перепечатана по адресу: 1729747611. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3