python for 迭代器,迭代器和for循环
迭代器:迭代器对象必须同时实现_ _ iterator _ _和__next__方法才能成为迭代器。对于迭代器,__iter__返回自身,__next__返回迭代器中的下一个值。最后,当没有元素时,抛出一个异常(开发者可以看到这个异常)。
1.迭代器必须是可迭代对象,因为它实现__iter__()方法;(推荐学习:Python视频教程)
2.iterator()方法(在类内部是__iter__)可以让迭代器返回迭代器。
3.迭代器的__iter__方法返回自身,不产生新的迭代器对象。
第三个性质是iterable对象可以重复迭代的原因(每次返回一个独立的迭代器,可以保证不同的迭代过程互不影响);迭代器只能遍历一次,因为它返回自身。
for循环的工作机理
当对象本身是迭代器时,For循环工作:
调用__iter__方法,返回自身,即迭代器。不断调用迭代器的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教程专栏学习!
本文地址:http://itbyc.com/Python/22184.html
请注明出处。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。