generator란, 키워드 yield를 사용하여 iterator를 생성함으로써 그때 그때 필요한 값을 사용할 수 있는 기능이다.
이 링크를 보면 보다 자세한 정의가 나와있다.
그럼 iterator란 무엇일까!
우선 iterator는 iterable과는 좀 다른 의미를 가진다.
하지만, iterable 객체라고 해서 모두 iterator인 것은 아니다.
iter()함수를 사용하여 iterator로 만들어 줄 수 있지만,
이 함수를 쓰지 않더라도 for문으로 데이터를 순차적으로 불러오는 것이 가능하다.
(for문으로 looping 하는 동안 python내부에서 이 iterable객체를 iterator로 변환해준다고 한다.)
generator란
-generator란 앞서 말했듯이 키워드 yield를 사용하여 함수로부터 iterator를 생성해주는 함수이다.
-일반함수와의 차이점은 yield 뿐이다.
def generator(n):
i = 0
while i < n:
yield i
i += 1
g = generator(5) #객체생성
for x in g:
print(x)
>>>0
1
2
3
4
출처: https://bluese05.tistory.com/56 [ㅍㅍㅋㄷ]
위의 코드를 보면 yield가 어떻게 작동하는지 알 수 있다.
1. for문이 실행되면, 우선 generator함수가 호출된다.
2. 함수 실행 중 yield를 만나면 함수가 호출된 for문으로 가 print(x)를 우선 수행한다.
그럼 첫번째 값인 0이 출력된다.
**그렇다고 generator함수가 끝난게 아니라 yield에서 값을 반환한 후 그대로 유지하고 있는 상태임
3. 반환이 된 후, 다시 함수로 돌아가 yield 이후 구문인 i += 1 부터 수행한다.
4. 이후에 2번 3번 과정을 반복하게 된다.