iterator

  • next() 함수에 의해서 값을 하나씩 반환(next 호출 시점)
  • StopIteration
  • custom iterator
    • 정의한 클래스가 이터레이터를 지원하려면 iter 메서드를 정의해야함
    • iter 메서드에는 자신을 돌려주면 됨
      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
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      # custom iterator
      class MyIter():

      # iterator를 구성하려면 __iter__, __next__ 메소드가 필요하다.
      def __init__(self, li):
      self.container = li
      self.index = 0

      def __iter__(self):
      # 이터레이터를 지원을 위한 __iter__ 메소드를 정의
      # 자신을 돌려줌
      return self

      def __next__(self):
      # 어느 시점에 StopIteration 에러만 넘겨줄 수 있으면
      if self.index >= len(self.container):
      raise StopIteration

      ret = self.container[self.index]
      self.index += 1
      return ret


      li = [1, 2, 3, 4, 5]

      it = iter(li)
      type(it)
      >> list_iterator

      next(it)
      >> 1

      next(it)
      >> 2

      next(it)
      >> 3

      next(it)
      >> 4

      next(it)
      >> 5

      # StopIteration 에러 발생
      next(it)
      >> StopIteration


      # for문에서 li는 자동으로 iterator 객체가 된다.
      for e in li:
      print(e, end = ' ')
      >> 1 2 3 4 5

      it_obj = MyIter(li)
      it = iter(it_obj)
      type(it)
      >> __main__.MyIter

      next(it)
      >> 1

      next(it)
      >> 2

      next(it)
      >> 3

      next(it)
      >> 4

      next(it)
      >> 5

      # next() 호출 시점에서 지정한 예외가 발생할 수 있도록 조건 지정
      # StopIteration 에러 발생
      next(it)
      >> StopIteration
Share