✅ 제너레이터 표현식이란?
리스트 내포(list comprehension)과 비슷하지만, 메모리에 모든 값을 저장하지 않고 하나씩 생성해주는 문법입니다.
🔹 문법
(expression for item in iterable if 조건)
⚠️
[]
대신 ()
를 사용합니다.🔸 예시 1: 제곱값 생성
gen = (x * x for x in range(5))
print(gen) # <generator object ...>
print(next(gen)) # 0
print(next(gen)) # 1
print(next(gen)) # 4
🔸 예시 2: 짝수만 필터링
evens = (x for x in range(10) if x % 2 == 0)
for n in evens:
print(n) # 0 2 4 6 8
✅ 리스트 내포와의 차이점
구분 | 리스트 내포 (List Comprehension) | 제너레이터 표현식 (Generator Expression) |
문법 | [x * x for x in range(5)] | (x * x for x in range(5)) |
결과 | 리스트 반환 | 제너레이터 반환 |
메모리 | 한 번에 모든 값 저장 | 필요한 순간에 하나씩 생성 (메모리 절약) |
속도 | 빠름 (작은 데이터에 적합) | 느릴 수 있음 (큰 데이터에 적합) |
필요한 순간에 하나씩 생성
→ 현재 위치(index같은 내부 상태)만 저장하고 next() 등으로 호출하면 알고리즘 실행해서 결과 반환
🔍 언제 쓰나요?
- 데이터가 크고, 한 번씩만 처리하면 되는 경우
- 메모리를 아끼고 싶을 때
sum()
,any()
,all()
같이 반복만 필요한 경우
total = sum(x * x for x in range(1000000)) # ✅ 효율적
Share article