[Python] Generator란?
Python

[Python] Generator란?

Generator란?

- iterator를 생성해주는 함수, 함수안에 yield 사용

- lazy evaluation으로 계산결과 값이 필요할때까지 계산을 늦춘다

- 무한한 순서가 있는 객체를 모델링 가능

 

iterator vs generator

- iterator는 데이터에 순차적으로 접근이 가능하지만 호출해야하는 모든 데이터를 미리 메모리에 적재해야한다.

- 반면 generator는 호출할 때마다 다음에 나올 데이터를 계산해서 반환한다. 메모리 효율이 좋다.

- 예를 들어 100억번까지 호출이 필요한 iterator를 만드려면 메모리에 100억개의 데이터를 저장해야하지만, generator는 100억까지를 순차적으로 계산할 수 있는 로직만 있으면 된다.

 

# iterator
a = iter([1,2,3,4])

next(a) #출력: 1
next(a) #출력: 2
next(a) #출력: 3
next(a) #출력: 4

# generator
def infinite_generator():
	count = 0
	while True:
		count+=1
		yield count

gen = infinite_generator()

next(gen) #출력: 1
next(gen) #출력: 2
next(gen) #출력: 3
next(gen) #출력: 4

yield

- yield는 return과 다르게 함수를 완전히 종료시키지 않는다.

- generator 함수가 실행중 yield를 만날경우, 해당 함수는 그 상태로 정지되며 반환값을 전달한다.

- 함수가 종료되는 것이 아니기때문에 함수는 그상태로 유지되고 함수에서 사용된 local변수는 메모리에 그대로 유지가 되어서 일시정지와 시작을 하는 맥락으로 계속해서 계산을 수행하고 generator에서 필요한 값을 반환받을 수 있다.

 

 

 

'Python' 카테고리의 다른 글

[Python] json 데이터 다루기  (1) 2021.10.16
[Python] iterable과 iterator  (0) 2021.10.15
[Python] 파이썬 가상환경(venv) 설정하기  (0) 2021.06.18