Generator

han811·2020년 11월 21일
0

python

목록 보기
4/5
post-thumbnail

파이썬에서 generator를 알아보기전에 먼저 iterable과 iterator가 무엇인지 명확히 구분하고 가는게 좋습니다.

iterable : 반복이 가능한 객체를 말합니다. 파이썬에서는 string, list, tuple, dictionary, set등이 iterable한 객체입니다.
iterator : next 메서드를 통해 다음 순서의 item을 반환할 수 있는 객체입니다.

즉 iterator는 iterable하지만 iterable이라고 해서 iterator는 아닙니다.
list만 해도 next([1,2])가 성립되지 않기 때문입니다.


Generator

generator는 다음의 특징들을 가집니다.

  • yield가 나올때 까지 함수가 실행되고 이후 yield가 없으면 함수가 종료됩니다.
  • yield가 더 이상 없어 generator가 종료되기 이전에는 함수내의 local 변수들 상태가 유지됩니다.
  • 대용량 데이터 처리시 몹시 유용합니다.

즉 함수의 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를 애용합시다 :)

profile
han811

0개의 댓글