我是靠谱客的博主 眯眯眼爆米花,最近开发中收集的这篇文章主要介绍迭代的一些概念与for循环机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一些概念
迭代:每次的结果都是根据上次迭代的结果来的。

迭代器协议:对象必须以同一个 .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循环机制所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部