Python学海无涯路【第17回】:迭代器

本文详细解析了迭代器协议的概念,包括next方法的作用及如何通过StopIteration异常终止迭代。探讨了for循环如何利用迭代器协议遍历各种对象,如字符串、列表、字典等,并解释了为何字典遍历时输出的是key。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、什么是迭代器协议

  • 迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIteration异常,以终止迭代(只能往后走不能往前退)
  • 可迭代对象:实现了迭代器协议的对象
  • 迭代器有两个基本的方法:iter() 和 next()。

2、for循环机制

for循环的本质:将对象用__iter__转换成可迭代对象,调用其next()方法。
字符串、列表、元组、字典、集合、文件对象,这些都不是可迭代对象,只不过在for循环时,调用了他们内部的__iter__方法,把它们变成了可迭代对象。

s="abc"
iter_test=s.__iter__()    		#遵循迭代器协议,生成可迭代对象
print(iter_test.__next__())		#输出a
print(iter_test.__next__())		#输出b
print(iter_test.__next__())		#输出c
print(iter_test.__next__())		#抛出异常StopIteration

3、为何要有for循环

对于序列类型,如字符串、列表、元组都有下标,可用索引的方式访问对象元素,例:

l=[1,2,3]
index=0
while index<len(l)
    print(l[index])
    index+=1

但是非序列类型对象,如字典、集合、文件,上述方法并不太好使。
而for循环就是基于迭代器协议提供了一个统一的可遍历所有对象的方法。
即在遍历之前,先调用对象的__iter__方法将其转换成一个迭代器。然后就可以使用迭代器对象的__next__方法,遍历循环。

4、字典的可迭代对象

dic={"a":1,"b":2,"c":3}
iter_dic=dic.__iter__()
print(iter_dic.__next__())  #输出a,遍历的是key
print(iter_dic.__next__())  #输出b,遍历的是key

字典用__iter__转换成可迭代对象,遍历出的是key的值。
这也说明了,for遍历字典为什么遍历的是key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值