2011년 7월 30일 토요일

파이썬 제네레이터 (python generator) - next()

이번글은 제네레이터에 대해서 좀 써보겠습니다.



일단 제네레이터는 함수형태로 선언이 되어있어야며,

함수한에 yield 구문이 있어야 generator로 선언이 됩니다.

제네레이터와 이터레이터는 유사하면서도 약간의 차이가 있는데 다음예제를 보시죠..

def countdown(n):
  print 'counting down from %d' % n 
  while n > 0:
     yield n 
     n -= 1
  return 

>>> c = countdown(10)
>>>

>>> c.next() 
Counting down from 10
10
>>> c.next()
9


일단 c로 generator가 생성이 되었습니다.
기본적으로 generator는 next() 를 호출하면 다음 yield가 있는데까지 동작을 하고,
현재 status를 keep 합니다.

그래서 처음 c.next()를 실행시면, 메시지랑 10을 출력하고 멈춥니다.

그리고 다음 c.next()를 호출하면 9를 출력하고 멈춥니다.

언제까지 동작을 하냐 하면, 더이상 yield 구문이 나오지 않을때 ,

그때 raise StopIteration 을 발생시키며, 제네레이터가 멈춥니다.

이것이 제네레이터의 기본적인 동작입니다.

이걸 list처럼 갖다가 쓰면, 똑같이 동작을 합니다.

위에서 선언한 countdown을 그냥 쓰면 다음과 같습니다.
for i in countdown(10):
   print i, 

10 9 8 7 6 5 4 3 2 1 0 

댓글 없음:

댓글 쓰기