next和iter

iter 是将可迭代对象变为迭代器

而迭代器则可以被next调用, next遍历完迭代器的数据后会抛出 StopIteration 异常

l = ['a', 'b', 'c']
i_l = iter(l)
print(i_l) # Iterator

print(next(i_l)) # a
print(next(i_l)) # b
print(list(i_l)) # ['c']
print(next(i_l)) # c

print(next(i_l)) #StopIteration

通过在类中添加 __iter__函数,向系统说明这是一个可迭代对象

通过在类中添加 __next__函数,向系统提供该可迭代对象的迭代算法

在代码执行过程中,for循环函数会自动检查系统信息,识别__iter__函数,然后自动调用对应的__next__函数,生成一个迭代器。

class Iterator(object):
    def __init__(self, ts):
        self.ts_iter = ts # [1,2,3,4]

    def __iter__(self):
        return self

    def __next__(self):
        return self.ts_iter.pop()