可迭代对象遍历的台前幕后,以及相关函数iter(),next()的使用。
1.可迭代对象
2
但这些数据是怎么拿到的?获取这些数据在幕后发生,台前是看不出来的:首先迭代对象通过一个特殊方法__iter__(),返回一个迭代器(iterator):
3
然后迭代器对象调用特殊方法__next__(),执行循环的时候迭代器每调用一次此方法返回序列的一个元素,直到调用完所有元素。这些步骤在python内部自动完成。
2.iter(),next()函数。
1
上面的迭代对象的幕后机制使得能自动遍历一个序列内的所有元素,而不需要我们在台前调用__iter__()和__next__()方法。如果要想在台前手动实现也是可以的。这要用到内建的两个公用函数iter(),next()。iter(obj)函数:返回一个生成器对象。就相当于幕后操作obj.__iter__()参数obj是一个可迭代的对象,
2
用函数iter(obj),返回的生成器对象,仍然可以用for in循环遍历,此时幕后同样用__next__()方法来每次获取元素实现遍历。
3
生成器对象也可手动用__next__(),每次获取元素。
4
next(iterator[, default])函数,返回迭代器对象的一个元素,如果元素取完,则返回default,如果没有默认参数则引发 StopIteration。
3.后话
1)要区分,可迭代对象和迭代器。2)特殊方法一般用在定义类中,所以在用到iter,和next时应使用iter(),next()函数。
下一篇:html的aside元素