728x90
<제너레이터(Generator)>
- 함수를 이용해서 이터레이터(반복)의 기능을 구현
- 이터레이터와 동일하게 호출 시점에만 메모리를 사용하고 사용이 끝나면 소멸된다
- 반환할때 사용하는 명령어는 return이 아닌, yield를 사용한다
- 이터레이터와 동일하게 전체 또는 next() 한 건씩 출력 가능하다
제너레이터는 여러개의 값을 반환할 수 있다
def simple_generator():
# 첫번째 반환할값
yield 1
# 두번째 반환할값
yield 2
# 세번째 반환할값
yield 3
### 제너레이터 전체 출력하기
# 제너레이터에서는 함수를 객체로 인지하고 사용한다
# 함수를 생성한다는 의미 또는 제너레이터 객체를 생성한다는 의미를 사용한다
for v in simple_generator():
print(v)
1
2
3
<예제> 1부터 5까지의 숫자를 생성해서 반환하는 제너레이터 만들기
### 함수이름 number_generator()
def number_generator():
for i in range(1,6):
yield i
for v in number_generator():
print(v)
1
2
3
4
5
gen = number_generator()
# 한 건씩 출력하기
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
6번째 부터는 yield가 없으므로 오류 발생
gen = number_generator()
# 한 건씩 출력하기
try :
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
except :
pass
try except로 예외처리하면 오류 발생하지않는다
<예제> 파일 한줄씩 읽어서 반환하는 제너레이터 만들기
### 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 line in gen:
print(line)
잠온다
집에가고싶다
룰루랄라
강사님 귀여우시네요@^_^@
제너레이터는 이터레이터와 마찬가지로 메모리를 적게 사용하기 위해 쓰인다.
따라서 이터레이터와 제너레이터는 시스템 구축에 주로 쓰인다.
간단한 로직, 특정한 기능을 수행하는 경우는 제너레이터 (함수 기반)
이터레이터는 클래스 기반이다.
728x90
'Python' 카테고리의 다른 글
Python 예제#2 (6) | 2023.11.17 |
---|---|
Python 정규표현식 (0) | 2023.11.16 |
Python 이터레이터(Iterator) (4) | 2023.11.16 |
Python 매개변수, 데코레이터(Decorator) (6) | 2023.11.14 |
Python 유니코드, 클로저 (5) | 2023.11.14 |