迭代器协议和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...