python迭代器和for循环的区别是什么(fo,python,别是,编程语言)

时间:2024-05-05 06:21:08 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    python%E8%BF%AD%E4%BB%A3%E5%99%A8%E5%92%8Cfor%E5%BE%AA%E7%8E%AF%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88

迭代器(iterator):迭代器对象必须同时实现__iter__和__next__方法才是迭代器。对于迭代器来说,__iter__ 返回的是它自身 self,__next__ 则是返回迭代器中的下一个值,最后没有元素时,抛出异常(异常可以被开发者看到)。

1.迭代器一定是可迭代对象,因为它实现了__iter__()方法;

2.通过iter()方法(在类的内部就是__iter__)能够使一个可迭代对象返回一个迭代器。

3.迭代器的 __iter__ 方法返回的是自身,并不产生新的迭代器对象。

第3点性质正是可迭代对象可以重复遍历的原因(每次返回一个独立的迭代器,就可以保证不同的迭代过程不会互相影响);而迭代器由于返回自身,因此只能遍历一次。

for循环的工作机制

当对象本身就是迭代器时,For循环工作机制:

调用 __iter__方法,返回自身self,也就是返回迭代器。不断地调用迭代器的next()方法,每次按序返回迭代器中的一个值。迭代到最后没有元素时,就抛出异常 StopIteration

在可迭代对象中,for循环工作机制:

先判断对象是否为可迭代对象(等价于判断有没有__iter__或__getitem__方法),没有的话直接报错,抛出TypeError异常。有的话,调用 __iter__方法,返回一个迭代器。在python内部不断地调用迭代器的__next__方法,每次按序返回迭代器中的一个值。迭代到最后没有元素时,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者。

此外,还要注意,python中的for循环其实兼容了两种机制:

如果对象有__iter__会返回一个迭代器。如果对象没有__iter__,但是实现了__getitem__,会改用下标迭代的方式。__getitem__可以帮助一个对象进行取数和切片操作。

当for发现没有__iter__但是有__getitem__的时候,会从0开始依次读取相应的下标,直到发生IndexError为止,这是一种旧的迭代协议。iter方法也会处理这种情况,在不存在__iter__的时候,返回一个下标迭代的iterator对象来代替。一个重要的例子是str,字符串就是没有__iter__方法的,但是却依然可以迭代,原因就是其在for循环时调用了__getitem__方法。

本文:python迭代器和for循环的区别是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:PHP5个优点是什么下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18