0Pricing
Python Academy · 강의

yield 키워드

yield를 사용해 사용자 정의 반복자를 위한 제너레이터 함수를 작성합니다.

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

소개

생성기 함수는 yield를 사용하여 값의 시퀀스를 지연 방식으로 생성하고, 각 yield 사이에서 실행을 일시 중지합니다.

yield란 무엇인가요?

yield가 있는 함수는 생성기 함수입니다. next()를 호출할 때마다 마지막 yield 지점부터 실행을 재개합니다.
def count_up(n):
    for i in range(n):
        yield i
for x in count_up(3):
    print(x)

생성기 함수와 일반 함수 비교

생성기 함수를 호출하면 생성기 객체가 반환되며, 아직 코드는 실행되지 않습니다. 코드는 순회할 때 실행됩니다.
def gen():
    print('start')
    yield 1
    print('middle')
    yield 2
g = gen()  # no print yet
print(next(g))  # 'start', then 1

무한 생성기

def naturals(n=0): while True: yield n; n+=1은 무한 시퀀스입니다. islice와 함께 사용하거나 break로 중단하세요.
def naturals(n=0):
    while True:
        yield n
        n += 1
import itertools
print(list(itertools.islice(naturals(), 5)))

yield from

yield from sub_gen()은 하위 생성기에 작업을 위임하고 모든 값을 전달합니다. for x in sub: yield x와 같습니다.
def chain(*iters):
    for it in iters:
        yield from it
print(list(chain([1,2], [3,4], [5])))

send()로 값 보내기

gen.send(value)는 생성기를 재개하고, 동시에 yield 표현식의 결과가 될 값을 전달합니다.
def accumulator():
    total = 0
    while True:
        n = yield total
        if n is None: break
        total += n
g = accumulator()
next(g)  # prime
print(g.send(10))
print(g.send(5))

생성기 상태

생성기는 각 yield에서 일시 중지되며 호출 사이에 지역 변수를 유지합니다. 자연스러운 코루틴처럼 동작합니다.
def stateful():
    seen = set()
    while True:
        item = yield
        seen.add(item)
        yield len(seen)
g = stateful()
next(g); g.send('a'); print(next(g)); g.send('b'); print(next(g))

생성기 닫기

gen.close()는 생성기 내부에서 GeneratorExit를 발생시킵니다. 정리 작업을 위해 생성기 내부에서 try/finally를 사용하세요.
def resource_gen():
    try:
        while True:
            yield
    finally:
        print('cleaned up')
g = resource_gen()
next(g)
g.close()

StopIteration 및 반환

생성기에서 return value를 사용하면 StopIteration 예외의 value 속성이 설정됩니다. yield from이 반환 값을 가져올 때 사용합니다.
def gen_with_return():
    yield 1
    yield 2
    return 'done'
g = gen_with_return()
try:
    while True: print(next(g))
except StopIteration as e:
    print('returned:', e.value)

피보나치 생성기

생성기는 무한한 수학적 시퀀스에 적합합니다: yield a; a, b = b, a+b
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
import itertools
print(list(itertools.islice(fibonacci(), 10)))

__iter__를 사용하는 생성기와 클래스 비교

생성기는 __iter__와 __next__를 사용하는 클래스를 직접 작성하는 것보다 간단합니다. 단순한 시퀀스에는 생성기를 사용하세요.
# Generator is simpler than:
# class Counter:
#     def __iter__(self): return self
#     def __next__(self): ...
print('generators simplify iterators')

빠른 확인

생성기 함수에서 yield from sub()은 어떤 작업을 수행하나요?

복습

yield는 생성기 함수의 실행을 일시 중지합니다. 생성기 함수는 생성기 객체를 반환합니다. yield from은 하위 생성기에 작업을 위임합니다. send()는 값을 전달하고, close()는 정리 작업을 실행합니다.

계속 진행하기

훌륭합니다! 다음 레슨으로 계속 진행하여 실력을 더욱 키워 보세요.

자주 묻는 질문

“yield 키워드” 강의는 무료인가요?

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

“yield 키워드”에서 뭘 배우나요?

yield를 사용해 사용자 정의 반복자를 위한 제너레이터 함수를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“yield 키워드” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 리스트 컴프리헨션
  2. 집합 및 딕셔너리 컴프리헨션
  3. 제너레이터 표현식
  4. yield 키워드
← Python Academy(으)로 돌아가기