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网别的相干文章!