[PythonCookBook][迭代器和生成器]迭代器元素的手动访问
发布日期:2021-05-28 16:50:20 浏览次数:8 分类:技术文章

本文共 1351 字,大约阅读时间需要 4 分钟。

迭代器和生成器的手动访问

一般在访问迭代器时,通常用到for循环,不过有些情况下你不想或者不能使用for循环,则我们使用next()函数来逐一获取迭代器元素

访问迭代器元素的方法1

for循环结束于StopIteration异常的抓取,这个例子中我们不使用类似for循环中的自动异常抓取,而是将其显示地在代码中执行。当next()函数掏空了迭代器抛出StopIteration异常时,我们手动抓取该异常,并打印出定制化的信息。

文本文件‘test’中的内容(最后一行是回车):

abcdefg

generator.py 和 test 文本放在同一个文件夹下

如此一来,我们在代码中的open()函数中直接输入test的文件名就可以导入文件内容了

在这里插入图片描述

generator.py的代码段:

该执行过程的思路是,先将test文件打开并存入变量f中,接下来使用try-except结构 来完成对变量f中的内容 的迭代。

迭代的主体过程体现在了while True永久循环中,直到其中的内容报错,进而进入except分支处理异常。

with open('test') as f: #打开文本文件    try:        while True: #利用死循环,试图掏空迭代器中的所有内容            line = next(f).strip('\n') #next函数在每个循环中获取f中的元素内容            print(line,end='#'+"\n") #将最新获取的元素内容打印出来    except StopIteration: #当f中没有元素时,next的执行会报错,错误内容是StopIteration,因此我们蓄意抓取这个异常        print("Stop Iter") #异常抓取后不会那么简单就完事儿了,我们还可以做一些爱做的事情,比如打印一串信息

执行结果

a#b#c#d#e#f#g#Stop IterProcess finished with exit code 0

访问迭代器元素的方法2

如果不想通过抛异常的方式结束迭代(因为总感觉不是那么优雅),我们可以让next函数主动上报信息,通知系统 迭代器里的元素已经被掏空了,可以结束循环了。这时我们就可以很优雅地结束循环。

文本文件‘test’中的内容(最后一行是回车):

abcdefg

generator.py 和 test 文本放在同一个文件夹下

在这里插入图片描述

generator.py的代码段:

with open('test') as f:    while True:        line = next(f, None).strip('\n') #next函数在耗光所有元素时会输出一个None值        if line is None: #利用上一步产生的None,判断循环应该结束了            break        print(line, end='$'+'\n') #每个循环打印一次 该循环获取到的 元素的信息

执行结果

该方法执行后就没有通过异常的方式打印定制化的信息了

a$b$c$d$e$f$g$Process finished with exit code 1

转载地址:https://blog.csdn.net/qq_33868661/article/details/114075529 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[Python][迭代器和生成器]委托迭代
下一篇:[深度学习]cifar10数据集使用方法

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年02月01日 02时19分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章