파이썬(Python) Iterator - 설명
파이썬에서 효율적으로 코드를 작성할 수 있는 방법 중에 이터레이터를 반드시 이해해야 된다고 생각됩니다.
이터레이터란 반복가능한 객체 즉, 반복문을 활용해서 데이터를 순회하면서 처리하는 것을 의미합니다.
- List
- Dictionary
- Set, Tuple, Str 등
즉, 위와 같은 순회 가능한 Sequence 객체들에 대해서 Iterable Object 라고 지칭합니다.
이미 순회 가능한 Design Pattern 으로 정의되어 있으며, 문서 하단에서 간단한 예제를 통해서 이터레이터를
쉽게 알아보도록 하겠습니다.
Python 관련 포스팅 : Python 관련
Python 관련 포스팅 : Python 관련
파이썬(Python) Iterator - 다이어그램
아래와 다이어그램으로 나타낼 수 있으며, 관련 예제는 하단에서 설명합니다.
Iterator 패턴 구조 - 출처
파이썬(Python) Iterator - 예제 코드
파이썬 이터레이터를 구현한 2개의 예제 파일입니다.
Iterator.py
123456789 #Iterator 예제1 a_tuple = (1, 2, 3)b_iterator = iter(a_tuple) #Tuple -> iterable -> iterator 반환 print(b_iterator.__next__())print(b_iterator.__next__())print(b_iterator.__next__())#print(b_iterator.__next__()) #예외발생: StopIteration cs
- 3번 라인 : Tuple 선언
- 4번 라인 : iter 객체 반환 - 6 ~ 8번 라인 : next() 메소드 호출 후 내부 데이터 순회- 9번 라인 : 주석 해제 시 StopIteration 예외 발생
1 2 3 4 5 6 7 8 9 | #Iterator 예제1 a_tuple = (1, 2, 3) b_iterator = iter(a_tuple) #Tuple -> iterable -> iterator 반환 print(b_iterator.__next__()) print(b_iterator.__next__()) print(b_iterator.__next__()) #print(b_iterator.__next__()) #예외발생: StopIteration | cs |
- 3번 라인 : Tuple 선언
- 4번 라인 : iter 객체 반환
Iterator2.py
Iterator2.py
1234567891011121314151617181920212223242526272829303132333435 #Iterator 예제2 class IterClass(object): def __init__(self, start, last): self.current = start self.max = last def __iter__(self): # 없으면 'object is not iterable' 예외 발생 return self def __next__(self): if self.current > self.max: raise StopIteration else: self.current += 1 return self.current - 1 n_list1 = IterClass(1,10)#타입 확인print(type(n_list1)) print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())print(n_list1.__next__())#print(n_list1.__next__()) #예외발생: StopIteration n_list2 = IterClass(1,30)print(list(n_list2)) #IterClass -> 리스트 자동 변환 cs
- 3번 라인 : 클래스로 Iterator 구현을 위해 Class 정의
- 8번 라인 : Iterable 한 Object 정의를 위한 __iter__ 메소드 Overriding- 11번 라인 : 데이터 순회를 위해 __next__ 메소드 Overriding 및 예외처리- 32번 라인 : 주석 해제 시 StopIteration 예외 발생
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #Iterator 예제2 class IterClass(object): def __init__(self, start, last): self.current = start self.max = last def __iter__(self): # 없으면 'object is not iterable' 예외 발생 return self def __next__(self): if self.current > self.max: raise StopIteration else: self.current += 1 return self.current - 1 n_list1 = IterClass(1,10) #타입 확인 print(type(n_list1)) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) print(n_list1.__next__()) #print(n_list1.__next__()) #예외발생: StopIteration n_list2 = IterClass(1,30) print(list(n_list2)) #IterClass -> 리스트 자동 변환 | cs |
- 3번 라인 : 클래스로 Iterator 구현을 위해 Class 정의
- 8번 라인 : Iterable 한 Object 정의를 위한 __iter__ 메소드 Overriding
Python Iterator 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Python Iterator 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
파이썬(Python) Iterator - 예제 실행 화면
아래 두 개의 이미지로 실제 실행 화면을 확인하실 수 있습니다.
실제 실행 화면1
실제 실행 화면2
마무리
실무에서 파이썬을 사용할 수록 느끼는 장점은 변화에 쉽게 대응 가능하며, 쉽게 읽고 사용할 수 있는
문법에서 주는 이점이 더욱 편리하게 느껴지는 것 같습니다.
다음 시간에는 파이썬 제네레이터(Generator)에 대해서 포스팅을 해보도록 하겠습니다.
소스코드 다운로드 : python_iterator.zip
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - Thread(쓰레드) 설명 및 예제 소스 코드(1) - 기초 (1) | 2018.05.06 |
---|---|
파이썬(Python) - 제네레이터(Generator) 설명 및 예제 소스 코드 (0) | 2018.05.04 |
파이썬 Youtube(유투브) 동영상 다운로드 및 MP3 자동 변환 예제 소스 (32) | 2017.12.22 |
파이썬 아나콘다(Anaconda) - 텐서플로우(TensorFlow) 설치 및 실행 (12) | 2017.12.15 |
파이썬 아나콘다(Anaconda) - 기초 사용법 정리(2), 가상환경 관리 (0) | 2017.12.05 |