yield 키워드는 생성기에서 사용됩니다. 동작을 이해하기 위해 먼저 iterable이 무엇인지 살펴보겠습니다. Python 객체 목록, 파일, 문자열 등을 iterable이라고 합니다. for .. in 구문을 사용하여 순회할 수 있는 모든 객체는 반복 가능합니다. Iterator 객체도 반복 가능하지만 한 번만 반복할 수 있습니다. Iterator 객체는 iter() 함수를 사용하여 모든 iterable에서 얻을 수 있으며 iter는 반복이 수행되는 next() 메서드를 가지고 있습니다.
>>> L1 =[1,2,3,4]>>> I1 =iter(L1)>>> while True:try:StopIteration:sys.exit()사전>제너레이터는 함수와 비슷하게 보이지만 yield 키워드로 iterator에서 연속적인 항목을 생성합니다.
제너레이터 함수가 호출되면 함수 실행을 시작하지 않고 반복자 객체를 반환합니다. next() 메서드가 처음으로 호출되면 함수는 yield 문에 도달할 때까지 실행을 시작하여 산출된 값을 반환합니다. yield는 추적을 유지합니다. 즉, 마지막 실행을 기억하고 두 번째 next() 호출은 이전 값에서 계속됩니다.
다음 예제에서는 피보나치 수열의 숫자를 포함하는 반복기를 생성합니다. 생성기 함수 fibo()를 호출할 때마다 피보나치 수열의 연속 요소가 생성됩니다.
import sysdef fibo(n):a,b=0,1 while True:if a>n:return yield a a, b =b, a+bf =fibo(20)while True:try:print(next( f)) StopIteration 제외:sys.exit()