迭代器和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__是数据类型内置的,两个方法是一样的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值