旗下导航:搜·么
当前位置:网站首页 > Python教程 > 正文

python迭代器和for轮回区分【Python教程】,python

作者:搜教程发布时间:2019-11-27分类:Python教程浏览:44评论:0


导读:迭代器(iterator):迭代器对象必需同时完成__iter__和__next__要领才是迭代器。关于迭代器来讲,__iter__返回的是它自身self,__next__则...
迭代器(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轮回区分的细致内容,更多请关注ki4网别的相干文章!

标签:python


欢迎 发表评论: