Python 이터레이터(iterator), 제너레이터(generator)
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 종료
여기까지 파이선에서 어려운 내용중 하나라는 이터레이터에 대해서 설명완료하였음!
'프로그래밍 > Python' 카테고리의 다른 글
python using ocr(python을 이용하여 ocr, 이미지 프로세싱) (6) | 2015.07.05 |
---|---|
python 람다(Lambda) (4) | 2015.06.20 |
Python 데코레이터(Decorator) (3) | 2015.05.30 |
Python virtualenv 사용법(MAC기준,pip사용) (4) | 2015.05.14 |
Python 첫번째 (286) | 2015.03.17 |