• 회원가입
  • 로그인
  • 구글아이디로 로그인

[basic] Python - Iterator (반복자)

1194  

목차

  1. Iterators (반복자) 정의
  2. Iterator vs. Iterable 차이 
  3. Iterator 반복
  4. Iterator 생성
  5. StopIteration 키워드 - 반복 중단

 

Iterators (반복자) 정의

 

반복자는 셀 수 있는 수의 값을 포함하는 객체.

 



1.

반복자는 각각의 모든 값을 순회 가능.

 

2.

기술적으로, Python에서 반복자는 __iter __() 및 __next __() 메서드로 구성된 iterator protocol 구현하는 객체.

 

 

Iterator vs. Iterable 차이

 

1.

Interable(반복자그릇)은 Iterator (반복자) 담을 수 있는 그릇.

(예) String, List, Tuple, Set, Dictionary

 

2.

Iterable은 Interator 얻을 수 있을 iter() 메서드 내장.

 


[예제1] Tuple에서 iterator 반환받아, 값을 1개씩 순차적으로 출력.

 

code = ("HTML", "CSS", "JS")

lang = iter(code)

 

print(next(lang)) # HTML

print(next(lang)) # CSS

print(next(lang)) # JS 

 


[예제2] 문자열에서 iterator 반환 받아, 순차적으로 1글자씩 출력.

 

hz = "홈짱닷컴 Homzzang.com"

chr = iter(hz)


print(next(chr)) # 홈

print(next(chr)) # 짱

print(next(chr)) # 닷

print(next(chr)) # 닷

 

 

Iterator 반복

 

for 반복문 이용해, Iterable의 각 요소에 접근 가능.

즉, 

for문의 실제 동작은 iterator 객체 생성 후, 

각 반복 때 next() 메서드 실행하는 것음.

 


[예제1] Tuple 요소를 for 반복문 이용해 출력.

 

code = ("HTML", "CSS", "JS")

for x in code:

  print(x)

 

결과값:

HTML

CSS

JS


[예제2] 문자열의 각 문자를 for 반복문 이용해 출력.

 

hz = "홈짱닷컴"

for x in hz:

  print(x)

 

결과값:

 

Iterator 생성

객체나 클래스를 반복자로 생성하려면,

객체나 __iter__() 및 __next()__ 메서드 적용.


1. __iter__() 메서드

__init__() 함수가 모든 클래스에 기본 내장되어 객체 생성 시 초기화  작업 수행하는 것처럼, 

__iter__() 함수도 연산의 초기값 지정 역할로 맨 처음 한번 사용하며, 항상 iterator 객체 자체를 반환

 

2. __next__() 메서드

연산 가능케 하며, 호출할 때마다 iterable에서 다음 요소 반환.

 


[예제] 초기값 1 지정 후, 호출할 때마다 1씩 증가.

 

class Number:

  def __iter__(self):

    self.n = 1 # 맨 처음 호출 때만 사용.

    return self


  def __next__(self):

    x = self.n

    self.n += 1

    return x


obj = Number()

num = iter(obj)


print(next(num)) # 1 (※ self.n은 2 된 후, 1 출력. 초기값 사용)

print(next(num)) # 2 (※ self.n은 3 된 후, 2 출력. 이전값 사용) 

print(next(num)) # 3 (※ self.n은 4 된 후, 3 출력. 이전값 사용)

 

 

StopIteration 키워드 - 반복 중단

 

위 예제 경우, next() 무한하면 끝도 없이 반복됨.

또한, 아래 예제 경우 조건문이 없다면 무한반복.

 

2.

무한 반복 막으려면, __next__() 함수 안에 특정 조건일 때 반복 종료 시키는 raise StopInteration 구문 추가.

 


[예제] 3까지만 반복해 출력.

 

class Number:

  def __iter__(self):

    self.n = 1

    return self


  def __next__(self):

    if self.n <= 3:

      x = self.n

      self.n += 1

      return x

    else:

      raise StopIteration


obj = Number()

num = iter(obj)


for x in num:

  print(x) 

 

결과값:

1

2



분류 제목
basic Python - Lambda (람다함수) - 작은 1회용 익명함수
basic Python - Array (배열)
basic Python - Class/Object (클래스/객체) ※ __init__() 함수
basic Python - Inheritance (상속)
basic Python - Iterator (반복자)
basic Python - Scope (범위)
basic Python - Module (모듈)
basic Python - Datetime (날짜시간) 표시
basic Python - JSON (제이슨)
basic Python - RegEx (정규식) - 정규표현식
basic Python - PIP (피프) - 패키지(모듈) 관리자
basic Python - Try...Except - 에러 테스트/제어. (= 트라이...익세프트)
basic Python - User Input (사용자 입력)
basic Python - String Format (문자열 포맷)
basic Python - Math (수학)
2/2
목록
찾아주셔서 감사합니다. Since 2012