python迭代器和for循环区别-Python教程

资源魔 27 0
迭代器(iterator):迭代器工具必需同时完成__iter__以及__next__办法才是迭代器。关于迭代器来讲,__iter__ 前往的是它本身 self,__next__ 则是前往迭代器中的下一个值,最初不元素时,抛出异样(异样能够被开发者看到)。

1.迭代器肯定是可迭代工具,由于它完成了__iter__()办法;(保举学习:Python视频教程)

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相干技巧文章,请拜访Python教程栏目进行学习!

以上就是python迭代器以及for轮回区分的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题

抱歉,评论功能暂时关闭!