본문 바로가기

Programming/Python

[파이썬 프로그래밍] 20화 이터레이터 와 제너레이터

[파이썬 프로그래밍] 20화 이터레이터 와 제너레이터





 이썬 함수에 대한 계속된 학습으로 이번 시간에는 터미네이터의 친구 '이터레이터'와 '제너레이터'에

대해서 배워보도록 하겠습니다.


실제 터미네이터 친구는 아니구요, 어감이 좀 비슷하긴 한데요. 아무튼 시작해 보실까요?




이터레이터(iterator)




 for문 , 대표적인 반복문이죠. for문 사용방법은 예전에도 잠깐 언급했고 다음번에도

자세히 다룰예정이지만 다시한번 설명드리면, for 라고 선언해서 반복문을 돌리겠다고

선언한다음에 변수명을 넣습니다. 여기서는 line 이라고 임의로 만들고

in 이라고 쓴 다음에 open 으로 파일의 내용을 여는 모드로 했습니다.

그후 파이썬 기본경로인 ' C:\Python33 '  (버젼마다 끝에 숫자만 다릅니다.) 에서


저는 NEWS.txt 라는 텍스트파일이 있기 떄문에 그 파일을 print 출력하라는것인데

이터레이터 라는 것은 순서대로 접근하는 것이기 떄문에 여기서는 NEWS.txt 라는 

파일을 열어서 한줄씩 출력하게 됩니다.



다른 예제를 보시죠.





이번에는 간단한 숫자를 넣는 리스트를 for 반복문으로 돌려서 출력하는 것입니다.

이렇듯 리스트 외에도 튜플등 순회 가능한 객체에는 '이터레이터' 라는 객체가 포함되어

있기 떄문에 순서대로 접근할수 있습니다.








제너레이터(generators)




제너레이터는 이터레이터를 만드는 도구 입니다.  

위에서 부터 해석하면, 함수 Programer 가 실행되면 제너레이터 객체가 반환됩니다. 

'P,r,o,g,r,a,m,e,r' 이 순서대로 반환 됩니다.


함수의 상태가 보존되고 다시 호출된다는 것은 이터레이터 객체를 만들떄 도구가

될수있습니다. 


Programer() 함수를 호출하면, 제너레이터 라고 표기되면서 메모리 주소값이

나오는 것을 확인할 수 있습니다.


iter 함수는 순회가능한 객체에서 이터레이터를 가져옵니다. 

it 은 이터레이터 객체입니다.


next(it) 으로 계속 호출하면, Programer 을 차례대로 출력해줍니다. 

중간에 it.__next__() 이런식으로 직접 메서도를 실행할수도 있습니다.

마지막에 'r' 까지 정상 출력후에 또다시 next(it)을 호출하면 오류가 납니다.

 요소의 끝부분에서는 실행하면 StopIteration 예외가 발생하게 됩니다.