1、什么是可迭代对象?

我们知道,在Python世界里,一切皆对象。对象根据定义的维度,又可以分为各种不同的类型,比如:字符对象,列表对象,文件对象…等等。那什么是可迭代对象呢?简单的来说,如果一个对象实现了__inter__方法,那么这个对象就叫做可迭代对象。__iter__方法的作用是让对象可以用for … in循环遍历。简单的来说,就是能用for循环进行迭代的对象就是可迭代对象。比如:字符串,列表,元祖,字典,集合等等,都是可迭代对象。

2、__iter__方法的实现原理是什么呢?

__inter__方法的作用就是返回一个迭代器,这里又冒出一个“迭代器”,估计很多人都有点犯晕了,迭代器又是什么东西呢?别急,慢慢来,很简单的:实现了__next__方法的对象都可以称之为迭代器。

3、迭代对象和迭代器的关系是什么呢?

迭代对象和迭代器可以是同一个对象,也可以不是,但是大多数情况下,一个对象往往会同时实现__iter__和__next__方法,所以它即是迭代对象也迭代器。使用的过程中,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。如下代码所示:

class MyNumbers:

    def __iter__(self):
        self.data = 1
        return self

    def __next__(self):
        if self.data <= 10:
            temp = self.data
            self.data += 1
            return temp
        else:
            raise StopIteration

mynumber = MyNumbers()

for x in mynumber:
  print(x)

输出结果为:

1
2
3
4
5
6
7
8
9
10