제네레이터

2026. 7. 27. 16:11python/파이썬

728x90

 

  • 리스트 → 🍱 도시락 5개를 미리 만들어 놓음
  • 제너레이터 → 🍳 주문이 들어올 때마다 하나씩 만들어 줌

1. 이터러블(Iterable)

반복 가능한 객체

for문을 사용할 수 있는 객체

예시

 
a = [1,2,3]
 
 
for i in a:
    print(i)
 

대표적인 이터러블

  • list
  • tuple
  • dict
  • set
  • str
  • range()

📌 특징

  • __iter__() 있음
  • iter()를 사용할 수 있음.

2. 이터레이터(Iterator)

데이터를 하나씩 꺼내주는 객체

생성

 
a = [1,2,3]
it = iter(a)
 

사용

 
print(next(it))
print(next(it))
print(next(it))
 

출력

1
2
3
 

끝나면

StopIteration
 

발생합니다.


특징

  • next() 사용 가능
  • __next__() 있음
  • 값을 하나씩 반환
  • 한 번 읽으면 다시 처음부터 읽지 못함.

3. 제너레이터(Generator)

이터레이터를 쉽게 만드는 함수

yield를 사용합니다.

 
def gen():
    yield 1
    yield 2
    yield 3
 

생성

 
g = gen()
 

사용

 
print(next(g))
 
1
 

다시

2
 

다시

3
 

특징

  • yield 사용
  • next() 가능
  • 값을 하나씩 생성
  • 메모리를 적게 사용

4. 컴프리헨션(Comprehension)

반복문을 짧게 작성하는 문법

리스트

 
[x**2 for x in range(5)]
 

딕셔너리

 
{x:x**2 for x in range(5)}
 

조건

 
[x for x in range(5) if x%2==0]
 

5. 제너레이터 표현식

리스트

 
[x*x for x in range(5)]
 

제너레이터

 
(x*x for x in range(5))
 

차이

[] → 모두 생성
() → 하나씩 생성
 

6. 리스트 컴프리헨션 vs 제너레이터

리스트

 
list_job = [longtime_job() for i in range(5)]
 

실행

5번 모두 실행

↓

5초

↓

리스트 생성
 

제너레이터

 
gen_job = (longtime_job() for i in range(5))
 

실행

next()

↓

1번 실행

↓

1초
 

필요할 때만 실행됩니다.

이것을

Lazy Evaluation(느긋한 계산)

이라고 합니다.


가장 많이 헷갈리는 관계

이터러블
   │
iter()
   ▼
이터레이터
   ▲
   │
제너레이터
 
  • 이터러블 → 반복 가능한 객체
  • 이터레이터 → 값을 하나씩 꺼내는 객체
  • 제너레이터 → 이터레이터를 쉽게 만드는 방법

시험 암기표

구분역할생성사용
이터러블 반복 가능한 객체 [], (), {}, range() for, iter()
이터레이터 값을 하나씩 꺼냄 iter() next()
제너레이터 값을 하나씩 생성하는 이터레이터 yield, () next()
컴프리헨션 반복문을 짧게 작성 [], {} 리스트/딕셔너리 생성

암기 한 줄

  • 이터러블 = 반복할 수 있는 대상
  • 이터레이터 = 하나씩 꺼내는 객체
  • 제너레이터 = 하나씩 만들어서 꺼내는 이터레이터
  • 컴프리헨션 = 반복문을 짧게 쓰는 문법