迭代器
print(dir([])) # 输出列表所有的方法
什么叫迭代
字符串、列表、元组、字典、集合都可以被for循环,说明他们都是可迭代的。
from collections.abc import Iterable
l = [1,2,3,4]
t = (1,2,3,4)
d = {
1:2,3:4}
s = {
1,2,3,4}
print(isinstance(l,Iterable))
print(isinstance(t,Iterable))
print(isinstance(d,Iterable))
print(isinstance(s,Iterable))
能被for循环的就是“可迭代的”,要想可迭代,内部必须有一个__iter__
方法。
print([1,2].__iter__())
# 结果 迭代器
<list_iterator object at 0x1024784a8>
迭代器协议
# 列表的迭代器比起列表来说实现了哪些新方法
'''
dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法,都是以列表的形式返回给我们的,为了看的更清楚,我们分别把他们转换成集合,
然后取差集。
'''
#print(dir([1,2].__iter__()))
#print(dir([1,2]))
print(set(dir([1,2].__iter__()))-set(dir([1,2])))
结果:
{
'__length_hint__', '__next__', '__setstate__'}
iter_l = [1,2,3,4,5,6].__iter__()
#获取迭代器中元素的长度
print(iter_l.__length_hint__())
#根据索引值指定从哪里开始迭代
print('*',iter_l.__setstate__(4))
#一个一个的取值
print('**',iter_l.__next__())
print('***',iter_l.__next__())
在for循环中,就是在内部调用了__next__
方法才能取到一个一个的值。
l = [1,2,3,4]
l_iter = l.__iter__()
while True:
try