Что делает ключевое слово "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.

30 8531

30 ответов: