概述
一些概念
迭代:每次的结果都是根据上次迭代的结果来的。
迭代器协议:对象必须以同一个 .next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopIteration异常以终止迭代。(只能往后走,不能往前退)
可迭代对象:遵循迭代器协议的对象就是可迭代对象。
for循环机制
字符串、列表、元组、字典、集合、文件对象这些都不是可迭代对象,在for循环中调用了他们的__iter__()方法,将他们转化成了可迭代对象。
for循环做的一件事就是将数据调用__iter__()方法转化为可迭代对象,第二件事为捕获stopIteration异常并在出现异常时终止迭代。
所以我们说for循环是遵循迭代器协议去访问对象的。
for 循环存在的必要性:字符串、列表、元组是有序的,可以通过索引的方式遍历,但无序的字典、集合、文件对象是不可通过引索遍历的,只能通过for循环
iter_test = x.__iter__()
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
L = [1, 2, 3]
iter_test = L.__iter__()
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
针对集合和文件对象的情况:
s = {1, 2, 3}
iter_s = s.__iter__()
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())
#这也解释了为什么for循环文件句柄时是要一行给一行(底层执行的是__next__()操作)
f = open("Test1", "r+", encoding="utf8")
iter_f = f.__iter__()
print(iter_f.__next__(), end="")
print(iter_f.__next__(), end="")
print(iter_f.__next__(), end="")
print(iter_f.__next__(), end="")
f.close()
此外,除了调用可迭代对象中的__next__()方法得到下一项,还可以利用内置函数next()得到可迭代对象的下一项内容。
L = [1, 2, 3, 4]
iter_L = L.__iter__()
print(iter_L.__next__())
print(next(iter_L))
用while去模拟for循环所做的事
try:
except:
关键字表示在不报错的情况下运行
L = [1, 2, 3, 4, 5]
diedai_L = L.__iter__()
while True:
try:
print(diedai_L.__next__())
except:
print("结束")
break
最后
以上就是眯眯眼爆米花为你收集整理的迭代的一些概念与for循环机制的全部内容,希望文章能够帮你解决迭代的一些概念与for循环机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复