안녕하세요!
python generator(제너레이터) 간단 정리 본문
728x90
반응형
<제너레이터(Generator)>
- 함수를 이용해서 이터레이터(반복)의 기능을 구현
- 이터레이터와 동일하게 호출 시점에만 메모리를 사용하고, 사용이 끝나면 소멸됩니다.
- 반환할 때 사용하는 명령어는 return이 아닌, yield를 사용합니다.
- 이터레이터와 동일하게 전체 또는 nest() 한건씩 출력 가능합니다.
- 데코레이터,이터레이터,제너레이터는 시스템을 구축할때 많이 사용한다.
제너레이터 기본 문법
def simple_generator() :
###첫번째 반환할 값
yield 1
###두번째 반환할 값
yield 2
###세번째 반환할 값
yield 3
for v in simple_generator() :
print(v)
1
2
3
제너레이터에서는 함수를 객체로 인지하고 사용하므로 함수를 생성한다는 의미 또는 제너레이터 객체를 생성한다는 의미다.
1부터 5까지의 숫자를 생성해서 반환하는 제너레이터 만들기
def number_generator():
for i in range(1, 6, 1):
yield i
gen = number_generator()
for num in gen:
print(num)
1
2
3
4
5
(물론 yield를 5개를 생성해도 되지만 설마 그렇게 하진 않으셨겠죠..?)
generator도 하나씩 프린트가 가능하다.
### - 함수 객체 생성하기
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
<예제> 파일 한줄씩 읽어서 반환하는 제너레이터 만들어보기
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("./05_example.txt")
for j in gen:
print(j)
안녕하세요
shinyfood입니다.
제 tistory를 방문해주셔서 감사합니다.
앞의 이터레이터와 마찬가지로 사용이 가능하다.
두개의 차이점은 제너레이터는 함수를 기반으로하고, 이터레이터는 클래스를 기반으로 한다는점이다.
물론 이터레이터가 더 많이 사용되지만 제너레이터도 사용되니 기억해두도록 하자.
728x90
반응형
'개발일지 > python' 카테고리의 다른 글
django 설치부터 웹까지 정리. (0) | 2024.02.05 |
---|---|
python 도서 키오스크 만들기(class) (2) | 2023.11.17 |
python Iterator(이터레이터)정리2 짝수반환, 텍스트 추출 (0) | 2023.11.16 |
python Iterator(이터레이터)정리1 메모리 사용량 확인 (0) | 2023.11.16 |
python decorator(데코레이터) 간단 정리 (0) | 2023.11.15 |