我是靠谱客的博主 自信斑马,最近开发中收集的这篇文章主要介绍迭代器和for循环机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是递归,之前举过一个问路的例子,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循环机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部