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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.