generator - python - 파이썬 - "수익"키워드의 기능은 무엇입니까?

파이썬 제너레이터 속도 / python / iterator / yield / coroutine

Python 에서 yield 키워드를 사용 하는 것은 무엇이며 어떤 역할을합니까?

예를 들어,이 코드 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

iliketocode



Answer #1

원래 버전 :

def some_function():
    for i in xrange(4):
        yield i

for i in some_function():
    print i

이것은 기본적으로 Python 인터프리터가 위 코드로 수행하는 작업입니다.

class it:
    def __init__(self):
        # -1에서 시작하여 아래에 1을 더하면 0이됩니다.
        self.count = -1

    # __iter__ 메소드는 'for'루프에 의해 한 번 호출됩니다.
    # 나머지 마법은이 메서드가 반환 한 객체에서 발생합니다.
    #이 경우 객체 자체입니다.
    def __iter__(self):
        return self

    # 다음 메소드는 'for'루프에 의해 반복적으로 호출됩니다.
    # StopIteration이 발생할 때까지.
    def next(self):
        self.count += 1
        if self.count < 4:
            return self.count
        else:
            # StopIteration 예외가 발생합니다.
            # 반복기가 완료되었음을 알립니다.
            # 이것은 'for'루프에 의해 암시 적으로 포착됩니다.
            raise StopIteration

def some_func():
    return it()

for i in some_func():
    print i
iterator = some_func()
try:
    while 1:
        print iterator.next()
except StopIteration:
    pass