range它欺骗我的对迭代器的感情

range不是iterator,是iterable

一开始,我以为range就是个iterator,但是前天都是看了一片文章,大概的看了一下标题:“range对象不是迭代器”。由于快下班没有仔细看,只是比较疑惑,貌似记得这个货就是一个迭代器啊。

想到迭代器,我居然记不清楚什么叫迭代器了,实实在在是官方文档中的介绍不太好记,刚才看到一位网友对迭代器的定义,突然明白了,说的真好,通俗易懂。

迭代器:

  • 能把里面的内容“逐一”取的容器是 Iterable,比如 list、string、dict 等。range 属于这一类。
  • 为了将 Iterable 容器里的内容“逐一”取出来,我们需要通过 Iterator (即迭代器)。通过 iter()我们可以获得一个 Iterable 对应的 Iterator。

我想了想,有一个特点,这个网友也说了,那就是“一次性”, iterator是一次性的东西,取完即完。

但是在实际使用range的时候,这个真的不是是一次性的东西,比如第一次使用,是没有问题的,但是如果是iterator,第二次使用的时候就有问题了,毕竟iterator是一次性的,第二次使用的时候即为空了。