Какая польза от ключевого слова 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
метод _get_child_candidates
? Список возвращен? Единственный элемент? Это называется снова? Когда последующие звонки прекратятся?
1. Этот фрагмент кода был написан Йохеном Шульцем (jrschulz), который создал отличную библиотеку Python для метрических пространств.Это ссылка на полный источник: Модуль mspace.