一、递归:函数自己调用自己
举例:问路
二、迭代:每次循环得到的结果都是依赖上一次而来的
举例:生宝宝
三、迭代器协议
- 迭代器协议:对象必须提供一个next方法,执行该方法姚蜜返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退)
- 可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
- 协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max)使用迭代器协议访问对象
四、for循环
(字符串,列表,元组,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环时,调用了他们内部的_iter_方法,把他们变成了可迭代对象然后for循环调用可迭代对象的_next_方法去取值,而且捕捉Stoplteration异常,终止迭代
l=[1,2,3,4] iter_test=l.__iter__()#遵循迭代器协议转换成可迭代对象 print(iter_test) print(iter_test.__next__()) print(iter_test.__next__()) # <list_iterator object at 0x00A1DE50> # 1 # 2
#只用索引进行遍历,while循环无法遍历字典、集合 l=[1,2,3,4] index=0 while index<len(l): print(l[index]) index+=1 # 1 # 2 # 3 # 4
- 集合
s={1,2,3} iter_s=s.__iter__() print(iter_s) print(iter_s.__next__()) print(iter_s.__next__())
- 字典
# 取keys值 dic={"a":1,"b":2} iter_d=dic.__iter__() print(iter_d.__next__()) # a
- 文件
test.txt内容 22 3ed445
f=open("test.txt","r+")iter_f=f.__iter__()print(iter_f)print(iter_f.__next__(),end="")print(iter_f.__next__())
# 22# 3ed
06 python s3 day18 迭代器补充.ev4未看