0Pricing
Python Academy · 강의

yield from과 위임

제너레이터 조합하기

yield from과 위임은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

yield from이 해결하는 문제

한 제너레이터가 다른 반복자의 모든 값을 생성하려면 수동 반복문을 작성할 수 있습니다. yield from을 사용하면 같은 작업을 한 줄로 처리할 수 있습니다.

def manual():
    for x in [1, 2, 3]:
        yield x

print(list(manual()))

yield from 소개

yield from iterable은 해당 반복자에 작업을 위임하고, 반복자의 각 값을 차례로 생성합니다. 값을 전달하는 반복문보다 짧고 이해하기 쉽습니다.

def delegate():
    yield from [1, 2, 3]

print(list(delegate()))

여러 소스 결합하기

여러 yield from 문을 연결하여 수열을 지연 방식으로 이어 붙일 수 있습니다.

def chained():
    yield from 'ab'
    yield from [1, 2]
    yield from range(2)

print(list(chained()))

다른 제너레이터에 위임하기

위임하는 반복자 자체가 제너레이터일 수도 있으므로, 여러 제너레이터를 더 큰 제너레이터로 구성할 수 있습니다.

def evens(n):
    for i in range(n):
        if i % 2 == 0:
            yield i

def report(n):
    print('evens:')
    yield from evens(n)

print(list(report(6)))

중첩 리스트 평탄화하기

yield from의 대표적인 사용법은 재귀적 평탄화입니다. 하위 리스트에 대해 자기 자신에게 작업을 위임하는 제너레이터를 만들 수 있습니다.

def flatten(items):
    for item in items:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

print(list(flatten([1, [2, [3, 4]], 5])))

yield from과 반복문 비교

아래의 두 버전은 같은 출력을 생성합니다. 가독성을 위해 yield from을 사용하는 것이 좋으며, 값 전달이나 반환 결과 같은 고급 기능도 함께 전달할 수 있습니다.

def with_loop(src):
    for x in src:
        yield x

def with_yield_from(src):
    yield from src

print(list(with_loop(range(3))))
print(list(with_yield_from(range(3))))

하위 제너레이터의 반환값 받기

위임된 제너레이터가 값을 return하면 yield from은 해당 값을 표현식의 결과로 사용합니다. 이를 통해 하위 제너레이터가 결과를 보고할 수 있습니다.

def counter(n):
    count = 0
    for i in range(n):
        yield i
        count += 1
    return count

def driver():
    total = yield from counter(3)
    print('subgen yielded', total, 'items')

list(driver())

pipeline 만들기

위임을 사용하면 pipeline을 이름이 있는 단계로 나누고 이를 쉽게 구성할 수 있습니다.

def source():
    yield from range(5)

def only_odd(src):
    for x in src:
        if x % 2 == 1:
            yield x

def pipeline():
    yield from only_odd(source())

print(list(pipeline()))

어떤 반복자에든 위임하기

yield from은 제너레이터뿐 아니라 리스트, 튜플, 집합, 문자열, 딕셔너리 키 등 모든 반복자에서 작동합니다.

def mixed():
    yield from {1, 2, 3}
    yield from ('a', 'b')

result = list(mixed())
print(sorted(str(x) for x in result))

순서대로 제너레이터 병합하기

여러 소스를 순서대로 순회하는 제너레이터를 만들 수 있으며, 이는 스트림을 이어 붙일 때 유용합니다.

def concat(*iterables):
    for it in iterables:
        yield from it

print(list(concat([1, 2], [3], [4, 5])))

가독성이 향상됩니다

깊게 중첩된 데이터나 트리 형태의 데이터에서는 yield from을 사용하면 재귀 제너레이터를 짧게 작성하면서 의도도 분명하게 표현할 수 있습니다.

def walk(tree):
    yield tree['name']
    for child in tree.get('children', []):
        yield from walk(child)

tree = {'name': 'root', 'children': [
    {'name': 'a'},
    {'name': 'b', 'children': [{'name': 'c'}]}
]}
print(list(walk(tree)))

빠른 확인

yield from에 대한 이해도를 확인해 보세요.

복습

yield from과 위임을 배웠습니다.

  • 내부 반복자의 모든 값을 전달합니다.
  • 제너레이터를 구성하고 재귀적 평탄화를 가능하게 합니다.
  • 하위 제너레이터의 반환값을 가져옵니다.
  • 수동으로 값을 전달하는 반복문보다 이해하기 쉽습니다.

다음 과정에서는 threading과 multiprocessing을 사용한 동시성 처리를 배웁니다.

자주 묻는 질문

“yield from과 위임” 강의는 무료인가요?

네 — “yield from과 위임” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“yield from과 위임”에서 뭘 배우나요?

제너레이터 조합하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“yield from과 위임” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 반복자 프로토콜
  2. 제너레이터 함수
  3. 제너레이터 표현식
  4. yield from과 위임
← Python Academy(으)로 돌아가기