Python 이터레이터(iterator), 제너레이터(generator)

Posted by jungbbong
2015. 3. 23. 22:25 프로그래밍/Python

python에서 가장 중요한 개념중에 하나인 


이터레이터와 제너레이터에 대해서 설명을하려고한다..



1. 이터레이터

 반복가능한 객체를 말한다


초간단 이해 -> 객체에 .next가 가능하다면 이터레이터가 맞음


ex. 이터레이터 =  iter(list) : list를 iter로 통하여 이터레이터를 만들었다, list는 반복가능하지만 이터레이터는 아니다.. 명시적으로 반복가능한객체로 만들어서 사용해줘야한다


1-1. 이터레이블

반복가능하다는뜻

반복(loop)연산이 가능하여 해당 위치를 이동해가면서 값을 사용할수 있는 지를 말한다

a라는 dict를 생성하여 class를 확인하면 a는 dict일뿐 이터레이터가 아니다




1-2. 이터레이션

반복가능한객체에서 해당값을 가져오는 행위



1-3. 이터함수( iter 함수)

list나 dict를 이터레이터로 만들어주는 함수


같은 예제를 반복해서 사용하긴 싫지만

-> a라는 dict를 생성하여 iter함수를 통하여 b라는 이터레이터를 만들어주었다.





보통 이터레이블하기 때문에 이터레이트는 for문과 짝을 이루어 사용한다.




2. 제너레이터

이터레이터를 만들어주는것을 말한다

= 반복가능한 객체를 만들어주는 행위


2-1. yield 란?


function에서 return과 동일한 역할을 수행한다.

= 결국 반환값이라는것인데,,,,

-> 해당 function을 yield를 사용하여 제너레이터를 만들어줌




해당 코드의 결과는 어떨까



실행 결과



get_START # generator 최초생성시점 , # yield 구문 돌입, 여기서부터 while문의 시작

for_START 0 # generator에서 yield로 리턴된 값을 받아서 for문의 시작

0

for_END 0

yield 후 0 # yield후에 잔여코드실행(while문이 아직 이때 i는 0의 상태로 실행되고 있는것), 다돌고난뒤에 while문 한번반복하여 yield를 해준다 값은 1을 리턴

for_START 1 # for loop이 최초한번 돌고 두번째 돌입

1

for_END 1

yield 후 1

for_START 2

2

for_END 2

yield 후 2

for_START 3

3

for_END 3

yield 후 3

get_END #generator 종료



여기까지 파이선에서 어려운 내용중 하나라는 이터레이터에 대해서 설명완료하였음!