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

[basic] Python - Iterator (반복자)

1013  

목차

  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 - Home (입문) - 이념 / 추천 링크
basic Python - Intro (소개) - 용도・특징
basic Python - Start (시작) - 파이썬 설치/실행/버전확인
basic Python - Syntax (구문) - 들여쓰기・변수・주석
basic Python - Comment (주석)
basic Python - Variable (변수)
basic Python - DataType (데이터타입) - 자료형
basic Python - Number (숫자)
basic Python - Casting (데이터 타입 변경) - 자료형 변환
basic Python - String (문자열) ★ ※ 색인번호 (= 인덱스) 개념.
basic Python - Boolean (참거짓)
basic Python - Operator (연산자)
basic Python - List (리스트) ★ - 변경 가능한 모음
basic Python - Tuple (투플/튜플) - 변경 불가 모음
basic Python - Set (셋/세트) - '순서(=색인)' 없고, 중복 허용 않는 데이터 모음.
basic Python - Dictionary (딕셔너리) - Key:value 쌍으로 구성된 모음
basic Python - if...elif...else - (이프조건문) ※ 3항연산자 = 삼항연산자
basic Python - While (와일반복문) - 와일문
basic Python - For (포반복문) ★★★★★
basic Python - Function (함수)
1/24
목록
찾아주셔서 감사합니다. Since 2012