1. 하나의 문장으로 제너레이터를 구성하는 방법
- 제너레이터 객체를 생성하는 방법을 언급하였음
① 제너레이터 함수(function) : 제너레이터를 만들기 위한 정의
② 제너레이터 표현식(expression) : 제너레이터를 만들기 위한 식
1) 제너레이터 표현식
- 제너레이터 표현식은 제너레이터 함수와 마찬가지로 제너레이터 객체를 생성하는 방법임
- 제너레이터 표현식은 문법 구성이 리스트 컴프리헨션과 거의 똑같음
- 리스트 컴프리헨션을 기반으로 만든 예제

- def show_all(s) : iterable 객체를 전달하면서 이 함수 호출
- st : 구구단 2단을 전부 저장한 리스트 생성
- show_all(st) : 위에서 정의한 show_all 함수 호출
- 제너레이터 함수 기반으로 작성한 예제

- def time2() : 제너레이터 함수 정의
- g = times2() : 제너레이터 객체의 생성
- show_all : 위에서 정의한 show_all 함수 호출
- 그러나 제너레이터 함수를 사용한 경우, 별도로 제너레이터 함수를 만들어주어야 함
- 제너레이터 함수의 장점과 단점은 명확
| 장점 | 메모리를 효율적으로 사용할 수 있음 |
| 단점 | 함수를 별도로 정의해야 함 |
2) 제너레이터 표현식
- 그러나 제너레이터 표현식을 사용하면, 위와 같은 단점을 해결할 수 있음

| 리스트 컴프리헨션 | st = [ 2 * i for i in range(1, 10))] |
| 제너레이터 표현식 | g = ( 2 * i for i in range(1, 10)) |
- 제너레이터 객체이기 때문에 next 함수를 호출하면 값을 하나씩 출력함

- 리스트 컴프리헨션 : 미리 만들어놓고 하나씩 던지는 것
- 제너레이터 표현식 : next 함수가 호출되어야 비로소 값을 만들어서 반환함
: 제너레이터 표현식의 최대 장점인 'lazy evaluation'

2. 제너레이터 표현식을 직접 전달하기

- 제너레이터 함수의 가장 큰 장점 : 표현의 간결함
- 그러나 제너레이터 함수를 복잡하게 만들면 그 장점을 잃어버려 쓸 필요가 없어짐
- 결론적으로, 제너레이터 함수도 제너레이터 표현식도 모두 상황별로 더 어울리는 경우가 있으니 둘 다 만들 줄 알아야 함
'윤성우의 열혈 파이썬 (중급)' 카테고리의 다른 글
| Story 12. 네임드 튜플 (0) | 2021.07.19 |
|---|---|
| Story 11. 튜플의 패킹과 언패킹 (0) | 2021.07.18 |
| Story 05. Iterable 객체와 Iterator 객체 (0) | 2021.07.15 |
| Story 03. 깊은 복사와 얕은 복사 (0) | 2021.07.15 |
| Story 06. 객체처럼 다뤄지는 함수 그리고 람다 (0) | 2021.07.15 |