데이터를 한 번에 모두 만들지 않고 필요할 때 생산합니다.
iterator는 __next__로 다음 값을 제공하고 끝나면 StopIteration을 발생시킵니다. yield가 있는 함수는 generator가 되어 실행 상태를 기억하며 값 하나씩 생산합니다.
lesson_batches는 yield를 만날 때마다 range 하나를 내보내고 그 자리에서 멈췄다가, for 문이 다음 값을 요청하면 start를 3 늘린 뒤 이어서 실행합니다. 그래서 [0, 1, 2], [3, 4, 5], [6, 7, 8]에 이어 마지막에는 min이 끝을 10으로 잘라 [9]만 나옵니다.
제너레이터는 한 번 소비하면 되돌릴 수 없습니다. len이나 인덱스가 필요하지 않으며 큰 파일과 스트림을 순차 처리할 때 메모리를 절약합니다.
무한 제너레이터나 외부 스트림에는 호출자가 처리량과 종료 조건을 통제할 수 있는 인터페이스를 제공합니다.
제너레이터를 출력하면 값 목록이 아니라 객체 표현이 보입니다. 반복하거나 list로 소비해야 합니다.
직접 바꿔보세요짝수만 생산하는 제너레이터를 만들고 처음 다섯 값을 출력하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.