本篇我们介绍 Python 中的可遍历对象(iterable)与迭代器(iterator),以及它们之间的区别。

可遍历对象

在 Python 中,可遍历对象是指包含零个、一个或者多个元素的对象。

可遍历对象支持一次返回一个元素,因此我们可以使用 for 循环遍历这类对象。

实际上,range() 函数就是一个可遍历的对象,因为我们可以遍历它的结果:

for index in range(3):print(index)

输出结果如下:

0
1
2

同理,字符串也是一种可遍历对象,因为我们可以使用 for 循环遍历字符串:

str = 'Iterables'
for ch in str:print(ch)

列表和元组也都是可遍历的对象,我们可以对它们进行遍历。例如:

ranks = ['high', 'medium', 'low']for rank in ranks:print(rank)

原则就是,如果某种对象可以遍历,它就是可遍历对象。

迭代器

可遍历对象可以进行迭代,迭代器(iterator)就是执行迭代操作时的代理对象。

如果想要获取可遍历对象的迭代器,可以使用 iter() 函数。例如:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)

一旦我们获得了迭代器,就可以利用 next() 函数获取可遍历对象中的下一个元素:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)color = next(colors_iter)
print(color)

输出结果如下:

red

每次调用 next() 函数都会返回可遍历对象的下一个元素。例如:

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)color = next(colors_iter)
print(color)color = next(colors_iter)
print(color)color = next(colors_iter)
print(color)

输出结果如下:

red
green
blue

如果遍历完所有元素之后,再次调用 next() 函数,将会返回一个异常。

colors = ['red', 'green', 'blue']
colors_iter = iter(colors)color = next(colors_iter)
print(color)color = next(colors_iter)
print(color)color = next(colors_iter)
print(color)# 返回异常
color = next(colors_iter)
print(color)

以上示例首先会返回 colors 列表中的三个元素,然后抛出一个异常:

red
green
blue
Traceback (most recent call last):File "iterable.py", line 15, in <module>color = next(colors_iter)
StopIteration

迭代器是有状态的,意味着一旦我们使用了迭代器中的元素,它就不再存在。也就是说,一旦我们遍历完整个迭代器,它就会变成一个空的迭代器。如果我们再次遍历这个迭代器,它不会返回任何内容。

由于我们可以遍历迭代器,因此迭代器也是一种可遍历对象。这一点比较令人困惑。例如:

colors = ['red', 'green', 'blue']
iterator = iter(colors)for color in iterator:print(color)

输出结果如下:

red
green
blue

如果我们使用一个迭代器作为参数调用 iter() 函数,它会返回一个相同的迭代器。

我们会在后续课程中介绍如何创建可迭代对象。

总结

  • 可遍历对象(iterable)是一种可以进行遍历的对象,它可以一次返回一个元素。
  • 迭代器(iterator)是执行迭代操作时的代理对象。迭代器拥有状态,它也是一种可遍历对象。
  • 使用 iter() 函数获取可遍历对象的迭代器,使用 next() 函数获取可迭代对象中的下一个元素。

【Python入门教程】第36篇 可遍历对象与迭代器相关推荐

  1. Python入门教程100天:Day09-面向对象进阶

    面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...

  2. python实现登录支付宝收能量_适合零基础人群学习的Python入门教程

    适合零基础人群学习的Python入门教程学什么?小编为大家准备的Python学习教程,课程主要讲解:Python核心编程.Linux基础.前端开发.Web开发.爬虫开发.人工智能等内容. 对于初学者想 ...

  3. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结

    原标题:菜鸟学Python入门教程大盘点|7个多月的心血总结 阅读本文大概需要5分钟 菜鸟学python已经写了70几篇,入门的教程已经快写完了,我把入门的文章整理了一下,下面是入门篇的一些总结,也是 ...

  4. python入门教程收藏_python入门教程:超详细保你1小时学会Python,快来收藏看看...

    简介:简介(转发文章+私信[Python]获取资料方式)1.Hello world安装完Python之后,打开IDLE(Python GUI) ,该程序是Python语言解释器,你写的语句能够立即运行 ...

  5. Linux Capabilities 入门教程--进阶实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...

  6. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(七)我把魔法变成了积木

    学习目标 了解魔法积木的使用--自定义函数 了解魔法积木的结果反馈--自定义函数返回值 了解魔法积木的原料传递--自定义函数传参 了解魔法积木的类型分类--类与对象 推荐 1.<备受好评的看得懂 ...

  7. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(六)精简魔法更强大

    学习目标 了解对相似逻辑的简化编写--循环 推荐 1.<备受好评的看得懂的C语言入门教程> 目录 第一篇:<假如编程是魔法之零基础看得懂的Python入门教程 >--(一)既然 ...

  8. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(五)我的魔法竟然有了一丝逻辑

    学习目标 了解魔法世界中的结构表现--缩进 了解魔法世界的逻辑判断--if 了解魔法世界的多次逻辑判断--ifelse嵌套 了解魔法世界中的逻辑运算--且 and 与或 or 推荐 1.<备受好 ...

  9. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(三)使用初始魔法跟编程魔法世界打个招呼吧

    学习目标 完成显示魔法的使用--输出print 完成传入魔法的使用--输入input 使魔法生效--运行python文件 目录 第一篇:<假如编程是魔法之零基础看得懂的Python入门教程 &g ...

最新文章

  1. 主流浏览器js 引擎内核市场份额attialx总结vOa9
  2. 关于javascript数据存储机制的一个案例。
  3. 给自己看的flex布局方法
  4. WebService开发
  5. JMS学习(1):MS基本概念
  6. About “PostMessage” SendMessage
  7. python 画蜘蛛_如何学习 R 绘图?
  8. 优秀的产品经理和一般的产品经理之间的区别
  9. 在不同浏览器都实用的各窗口大小获取方法
  10. fir低通滤波器c语言,大神教你:FIR与IIR低通滤波器的最简最快实现
  11. 你知道 FW 工程师 是做什么的吗?
  12. Win10 安装rational rose 7教程
  13. 【Git系列教程-5】Git多人协同工作时模拟代码冲突的产生 | 代码冲突解决方案
  14. 阴阳师服务器维护3月25日,《阴阳师》手游3月25日维护更新公告
  15. 关于获取安卓手机MAC地址的问题
  16. 类的成员函数指针和静态成员函数指针 调用成员函数***
  17. js获取当前日期及下一天日期
  18. Bluetooth技术学习笔记 ——HFP之Call
  19. 2022年氮气液化器市场前景分析及研究报告
  20. java学习记录十五:集合二Collections、Set、Map

热门文章

  1. 女孩晚睡的坏处有哪些
  2. Virtualbox 安装Win8 server2008 R2 等系统的时候错误 0xc0000225的解决办法
  3. python实现caj转pdf代码
  4. vSphere 性能优化方法 故障排错方法及工具总结(一)
  5. 叶罗丽颜值测试软件齐娜多少分,叶罗丽测试:选一双大长腿,测你的颜值在班里能排第几名?我是A...
  6. Acwing 3812.机器人走迷宫【全排列】
  7. 交互设计--用户头像的设计以及点击操作习惯
  8. 关于lstio服务网格介绍
  9. 3,4,5,6-四(9-咔唑基)-邻苯二腈,4CzPN cas:1416881-51-0光伏材料,齐岳定制
  10. Axure9 页面居中对齐