backend/python

iterator, generator

seul chan 2016. 11. 19. 00:34

*iterator


-공간 = iter( 리스트 )

ex) a = [0, 1, 2, 3]

b = iter(a) ; iterator를 담을 공간 'b'에 iter 함수를 사용하여 a 리스트 인자를 줌

-iterator: 공간 'b'가 이터레이터

-iteration: b로부터 순차적으로 요소를 가져오는 행위; next() 함수 사용

ex) next(b)

b.__next__()로 직접 메소드 시행도 가능

-iterable: 이더레이션이 가능하다는 의미


-리스트는 iterator가 아니다

next(a) => error ('list' object has no attribute 'next')

-그렇지만 list는 iterable 하다! (for문)




*Generator

-함수의 형태로 사용, return 대신에 yield 사용

-yield: 값을 반환하되 종료하지 않는다

ex) 

 def generation_test(n):

   ...:     print("generation start")

   ...:     while n < 6:

   ...:         print("generator: I give control to the main")

   ...:         yield n

   ...:         print("generator: I received a control")

   ...:         n += 1

   ...:         print("Generator: n += 1")

   ...:     print("Generator End")

   ...:     


In [5]: for i in generation_test(0):

   ...:     print("Main: I received a control")

   ...:     print(i)

   ...:     print("Main: I give control to the Generator")


-위 예시처럼 for문과 함께 사용.. 사용 예제 익혀야 할

-generator의 특성: 값을 반환해도 종료되지 않음/필요한 시점에 값을 생성하고 추출

-텍스트에서 한 라인씩 읽어서 특정 텍스트를 찾는 등의 동작을 하는 프로그램 등에서 사용


-참고

http://haerakai.tistory.com/34#recentTrackback

http://friberry.com/?p=254


-추가적으로 공부할 url