Build a Basic Python Iterator

前端 未结 10 1067
南旧
南旧 2020-11-21 12:22

How would one create an iterative function (or iterator object) in python?

10条回答
  •  悲&欢浪女
    2020-11-21 12:34

    Iterator objects in python conform to the iterator protocol, which basically means they provide two methods: __iter__() and __next__().

    • The __iter__ returns the iterator object and is implicitly called at the start of loops.

    • The __next__() method returns the next value and is implicitly called at each loop increment. This method raises a StopIteration exception when there are no more value to return, which is implicitly captured by looping constructs to stop iterating.

    Here's a simple example of a counter:

    class Counter:
        def __init__(self, low, high):
            self.current = low - 1
            self.high = high
    
        def __iter__(self):
            return self
    
        def __next__(self): # Python 2: def next(self)
            self.current += 1
            if self.current < self.high:
                return self.current
            raise StopIteration
    
    
    for c in Counter(3, 9):
        print(c)
    

    This will print:

    3
    4
    5
    6
    7
    8
    

    This is easier to write using a generator, as covered in a previous answer:

    def counter(low, high):
        current = low
        while current < high:
            yield current
            current += 1
    
    for c in counter(3, 9):
        print(c)
    

    The printed output will be the same. Under the hood, the generator object supports the iterator protocol and does something roughly similar to the class Counter.

    David Mertz's article, Iterators and Simple Generators, is a pretty good introduction.

提交回复
热议问题