迭代器协议和for循环工作机制
1、迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,已终止迭代(只能往后走不能往前退)
2、可迭代对象,实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max,函数等)使用迭代器访问对象
l = [1, 2, 3]
for i in l:
print(i)
for循环机制
for循环本质,循环所有对象,全都是使用迭代器协议。
(字符串,列表,元祖,字典,集合)这些都不是可迭代对象,只不过for循环试,调用了他们内部的__iter__方法,把他们变成了可迭代对象,然后他们变成了可迭代对象
然后for循环调用可迭代的对象的__next__方法去取值,而且for循环会捕捉StopIteration异常,以终止迭代
x = 'hello'
print(dir(x))
iter_text = x.__iter__()
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
转换成可迭代对象
xl = x.__iter__()
print(xl.__next__())
x = 'hello'
index = 0
while index< len(x):
print(x[index])
index+=1
有序的可以按照序列访问 while,无序的无法办到
for 循环可以循环任何
dic = {'a': 1, 'b': 2}
dic_l = dic.__iter__()
print(dic_l.__next__())
迭代器补充
存储于内存
l = ['dd','ee','ss']
这种方式 只得到地址
itr = l.__iter__()
print(itr.__next__())
print(itr.__next__())
print(itr.__next__())
print(itr.__next__())
next 方法就是调用 iter 的next方法
print(next(itr))
python 迭代器协议和for循环工作机制
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 一、什么是迭代器? 生成器概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中。...
- 如何循环一个数组?20年前 JavaScript 诞生的时候,你会这么写: ES5 之后,可以使用内置的 forE...