제네레이터
2026. 7. 27. 16:11ㆍpython/파이썬
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() |
| 컴프리헨션 | 반복문을 짧게 작성 | [], {} | 리스트/딕셔너리 생성 |
암기 한 줄
- 이터러블 = 반복할 수 있는 대상
- 이터레이터 = 하나씩 꺼내는 객체
- 제너레이터 = 하나씩 만들어서 꺼내는 이터레이터
- 컴프리헨션 = 반복문을 짧게 쓰는 문법
'python > 파이썬' 카테고리의 다른 글
| os, path 기본 라이브러리 (0) | 2021.10.05 |
|---|---|
| 윤인선님 강의 [25~35 피보나치] (0) | 2021.08.01 |
| 윤인선님 강의 [24] dic, for문 문제2 (0) | 2021.08.01 |
| 윤인선님 강의[21] for문 문제 (0) | 2021.08.01 |
| 윤인선 님 강의 파이썬 정리 ~ 리스트 (0) | 2021.08.01 |