PHpullh

PYTHON · 함수

yield from

yield from으로 하위 제너레이터에 위임하여 제너레이터 체이닝을 간결하게 합니다.

함수고급yield from위임제너레이터delegation

핵심 설명

yield from으로 하위 제너레이터에 위임하여 제너레이터 체이닝을 간결하게 합니다.

Python code

# yield from 기본
def inner():
    yield 1
    yield 2
    yield 3

def outer():
    yield 0
    yield from inner()  # 하위 제너레이터에 위임
    yield 4

print(list(outer()))  # [0, 1, 2, 3, 4]

# 트리 순회에 활용
def flatten(items):
    for item in items:
        if isinstance(item, (list, tuple)):
            yield from flatten(item)
        else:
            yield item

nested = [1, [2, [3, 4], 5], [6, 7]]
print(list(flatten(nested)))  # [1, 2, 3, 4, 5, 6, 7]

# yield from의 반환값
def sub_gen():
    yield "a"
    yield "b"
    return "완료!"

def main_gen():
    result = yield from sub_gen()
    print(f"sub_gen 반환: {result}")

for v in main_gen():
    print(v)
# a, b, sub_gen 반환: 완료!

학습 팁

yield from은 하위 제너레이터의 send()throw()도 자동으로 전달합니다.

주의할 점

yield from은 이터러블만 받습니다. 일반 함수의 반환값을 전달하려면 yield를 사용하세요.

자주 묻는 질문

yield from란 무엇인가요?

yield from 으로 하위 제너레이터에 위임하여 제너레이터 체이닝을 간결하게 합니다.

yield from 학습 시 주의할 점은 무엇인가요?

yield from 은 이터러블만 받습니다. 일반 함수의 반환값을 전달하려면 yield 를 사용하세요.