Что делает ключевое слово yield?
Какая польза от yield
Ключевое слово в Python? Что оно делает?
Например, я пытаюсь понять этот код 1:
def _get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
А это звонилка
result, candidates = [], [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Что происходит, когда метод _get_child_candidates
называется? Список возвращен? Единственный элемент? Это называется снова? Когда последующие звонки прекратятся?
1. Код взят от Йохена Шульца (jrschulz), который создал отличную библиотеку Python для метрических пространств. Это ссылка на полный источник: Модуль mspace.
61 ответ
Мы должны использовать yield, когда хотим перебрать последовательность, но не хотим сохранять всю последовательность в памяти. Доходность используется в генераторах Python. Функция генератора определяется как обычная функция, но всякий раз, когда ей нужно сгенерировать значение, она делает это с помощью ключевого слова yield, а не return.