概述
什么是递归,之前举过一个问路的例子,A问B,B问C,C问D 最后一个一个的返回结果,这叫递归
什么是迭代,每次结果都是依赖于上一次结果为迭代,问路例子,A问B,B让A去问C,A去问C,C让A去问D,就是这样
迭代器协议是指:
1、对象必须提供一个next方法,执行该方法要么返回迭代的下一项,要么就引起一个Stoplteration异常,来终止迭代(只能往后走不能往前退)
2、可迭代对象,实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具使用迭代器协议访问对象,内部工具是指如for循环,sum,min,max函数等
python当中一切皆对象,python当中所有的数据类型只要遵循迭代器协议去生成的,那他就是可迭代对象
(字符串、列表、元祖、字典、鸡盒、文件对象)这些都不是可迭代对象,只是for循环调用了他们内部的__iter__方法,把它们变成了可迭代对象,跟索引没有关系
q = [1,2,3,4]
w = q.__iter__()#转换成可迭代对象,并赋值给w
print(w)
print(w.__next__())#遵循了迭代器协议就一定会有一个next方法,就可以取列表了
print(w.__next__())
print(w.__next__())
print(w.__next__())
如果多打印一个就会报stopitertion错误,但是for循环捕捉到了这个错误就意味着已经取完了,不再继续迭代了
q =[1,2,3]
w = q.__iter__()
while True:
try:#异常捕捉,之后会说
print(w.__next__())
except StopIteration:
print('迭代完毕,循环终止')
break
关于内存问题比如说将一个对象变成迭代器形式,迭代器和之前的对象完全是两个不同的东西,所以迭代器占的内存很小
a = ['father','son','sunzi','hahaha']
z = a.__iter__()#z就是一个迭代器
print(z.__next__())#取第一次
print(z.__next__())#取第二次
print(next(z))#取第三次
next是python内置的,__next__是数据类型内置的,两个方法是一样的
最后
以上就是自信斑马为你收集整理的迭代器和for循环机制的全部内容,希望文章能够帮你解决迭代器和for循环机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复