[Python] 제너레이터(Generator) 정리
2020. 9. 28. 18:45ㆍProgramming Language/Python
반응형
■ 제너레이터(Generator) 란?
제너레이터(Generator)는 아이터레이터(iterator)를 생성해 주는 함수이다.
아이터레이터(iterator)는 next 함수를 이용해 데이터에 순차적으로 접근이 가능한 Object 이다.
일반함수와 제너레이터(Generator) 함수의 차이점은 yield 사용함에 있다.
일반함수는 사용이 종료되면 결과값을 호출부로 반환 후 함수 자체를 종료시킨 후 메모리 상에서 클리어되지만, 제너레이터(Generator)함수는 yield를 기점으로 next() 를 통해 반환 값을 호출한 쪽으로 전달하고 그 상태로 유지된다. 따라서 메모리에 그대로 유지되는 것이다.
■ 예시
- for 문이 실행되며, 먼저 generator 함수가 호출된다.
- generator 함수는 일반 함수와 동일한 절차로 실행된다.
- 실행 중 while 문 안에서 yield 를 만나게 된다. 그러면 return 과 비슷하게 함수를 호출했던 구문으로 반환하게 된다. 여기서는 첫번재 i 값인 0 을 반환하게 된다. 하지만 반환 하였다고 generator 함수가 종료되는 것이 아니라 그대로 유지한 상태이다.
- x 값에는 yield 에서 전달 된 0 값이 저장된 후 print 된다. 그 후 for 문에 의해 다시 generator 함수가 호출된다.
- 이때는 generator 함수가 처음부터 시작되는게 아니라 yield 이후 구문부터 시작되게 된다. 따라서 i += 1 구문이 실행되고 i 값은 1로 증가한다.
- 아직 while 문 내부이기 때문에 yield 구문을 만나 i 값인 1이 전달 된다.
- x 값은 1을 전달 받고 print 된다. (이후 반복)
def generator(n):
i = 0
while i < n:
yield i
i += 1
for x in generator(5):
print(x)
# ※ 출력 결과
# 0
# 1
# 2
# 3
# 4
반응형
'Programming Language > Python' 카테고리의 다른 글
[Django] 장고 프레임워크(Django Framework) (0) | 2020.10.07 |
---|---|
[Python] 데코레이터(Decorator) 정리 (0) | 2020.09.28 |
[Jupyter Notebook] 가상환경 구축 및 활용 (0) | 2020.07.02 |
[Python] 여러 데이터 비교를 위한 결과 HTML 수정 (0) | 2020.06.22 |
[Pandas] 데이터프레임(DataFrame) 병합 (2) | 2020.06.15 |