파이썬에서 generator를 알아보기전에 먼저 iterable과 iterator가 무엇인지 명확히 구분하고 가는게 좋습니다.
즉 iterator는 iterable하지만 iterable이라고 해서 iterator는 아닙니다.
list만 해도 next([1,2])가 성립되지 않기 때문입니다.
generator는 다음의 특징들을 가집니다.
즉 함수의 yield가 있는 곳 까지 실행이되고 또 그 내부 상태가 유지된다는 의미에서 느슨하게 평가된다라고 표현하는 것 같습니다.
그럼 어떻게 쓰는지 보실까요?
a = (i for i in range(10)
next(a)
위와 같이 코드를 작성하면 a는 generator로 생성되어 next(a)시 0을 반환합니다.
한번 더 하면 1을 반환합니다. ...
a = iter(list([3,2]))
next(a)
위와 같이 list를 iter라는 built-in 함수를 통해 generator로 만들 수 있습니다.
파이썬의 모든 iterable한 자료구조는 가능한 것 같습니다.
def gen():
yield 1
yield 2
yield 3
a = gen()
next(a)
위와같이 함수로 정의를 하여도 generator로 작동이 가능한 것을 볼 수 있습니다.
next(a)시 1이 반환되고 한번 더 하면 다음 yield값인 2가 반환됩니다.
무엇보다 메모리에 다 올리지 않고 매번 반복적으로 호출하여 사용하면 된다는 점이 굉장히 좋습니다.
이미지 데이터 학습시 데이터로인해 RAM이 터질 경우 generator를 애용합시다 :)