제너레이터(Generator)
- 함수를 이용해서 이터레이터(반복)의 기능을 구현
- 이터레이터와 동일하게 호출 시점에만 메모리를 사용하고 사용이 끝나면 소멸된다.
- 반환할 때 사용하는 명령어는 return이 아닌, yield를 사용한다.
- 이터레이터와 동일하게 전체 또는 next() 한건씩 출력 가능
- 메모리를 효율적으로 쓰고 싶을 때 사용(보통 시스템 구축할 때 많이 사용)
이터레이터(클래스 기반), 제너레이터(함수 기반)
< 제너레이터 기본 구조>
def simple_generator():
### 첫번째 반환할 값
yield 1
### 두번째 반환할 값
yield 2
### 세번째 반환할 값
yield 3
제너레이터 전체 출력하기
- 제너레이터에서는 함수를 객체로 인지하고 사용한다.
- 함수를 생성한다는 의미 = 제너레이터 객체를 생성한다는 의미.
for v in simple_generator():
print(v)
결과
0
1
2
3
4
<제너레이터 실습1>
<예제> 1부터 5까지의 숫자를 생성해서 반환하는 제너레이터 만들기
- 함수이름 : number_generator()
def number_generator():
for i in range(1,6):
yield i
전체 출력하기
- 함수 객체 생성하기
gen = number_generator()
for v in gen:
print(v)
결과
1
2
3
4
5
한건씩 출력하기(try-except!)
- 함수 객체 생성하기
gen = number_generator()
try:
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
except:
pass
결과
1
2
3
4
5
< 제너레이터 실습2>
<예제> 파일 한줄씩 읽어서 반환하는 제너레이터 만들기
- read_lines 함수 생성
def read_lines(file_path):
### 파일처리 시 이터레이터와 다르게, with문을 사용해도 됩니다.
with open(file_path, "r", encoding = "utf-8") as file:
for line in file:
yield line.strip()
제너레이터 함수 생성하기
gen = read_lines("./04_example.txt")
for v in gen:
print(v)
결과
오늘의 저녁은??
백미밥
순두부백탕
카레소스
치킨너겟/강정소스
배추김치
728x90
'Back-End > Python' 카테고리의 다른 글
[Python] 파이썬 실습2 - 회원전용 도서관리 키오스크 만들기 (4) | 2023.11.17 |
---|---|
[Python] 파이썬 알고리즘 - 이터레이터(Iterator), readLine(), nextLine() (5) | 2023.11.16 |
[Python] 파이썬의 기초 - 매개변수, 기본값(default) (2) | 2023.11.14 |
파이썬 실습2 - 도서 입고/대출/반납 관리를 위한 키오스크 만들기 (데코레이터) (1) | 2023.11.14 |
[Python] 파이썬 알고리즘 - 유니코드, 클로저(closure), 데코레이터 (3) | 2023.11.14 |