详细内容

迭代器(iterator):迭代器对象必须同时实现__iter__和__next__方法才是迭代器。对于迭代器来说,__iter__ 返回的是它自身 self,__next__ 则是返回迭代器中的下一个值,最后没有元素时,抛出异常(异常可以被开发者看到)。

1.迭代器一定是可迭代对象,因为它实现了__iter__()方法;(推荐学习:Python视频教程)

2.通过iter()方法(在类的内部就是__iter__)能够使一个可迭代对象返回一个迭代器。

3.迭代器的 __iter__ 方法返回的是自身,并不产生新的迭代器对象。

第3点性质正是可迭代对象可以重复遍历的原因(每次返回一个独立的迭代器,就可以保证不同的迭代过程不会互相影响);而迭代器由于返回自身,因此只能遍历一次。

for循环的工作机制

当对象本身就是迭代器时,For循环工作机制:

调用 __iter__方法,返回自身self,也就是返回迭代器。不断地调用迭代器的next()方法,每次按序返回迭代器中的一个值。迭代到最后没有元素时,就抛出异常 StopIteration

在可迭代对象中,for循环工作机制:

先判断对象是否为可迭代对象(等价于判断有没有__iter__或__getitem__方法),没有的话直接报错,抛出TypeError异常。有的话,调用 __iter__方法,返回一个迭代器。在python内部不断地调用迭代器的__next__方法,每次按序返回迭代器中的一个值。迭代到最后没有元素时,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者。

此外,还要注意,python中的for循环其实兼容了两种机制:

如果对象有__iter__会返回一个迭代器。如果对象没有__iter__,但是实现了__getitem__,会改用下标迭代的方式。__getitem__可以帮助一个对象进行取数和切片操作。

当for发现没有__iter__但是有__getitem__的时候,会从0开始依次读取相应的下标,直到发生IndexError为止,这是一种旧的迭代协议。iter方法也会处理这种情况,在不存在__iter__的时候,返回一个下标迭代的iterator对象来代替。一个重要的例子是str,字符串就是没有__iter__方法的,但是却依然可以迭代,原因就是其在for循环时调用了__getitem__方法。

更多Python相关技术文章,请访问Python教程栏目进行学习!

python迭代器和for循环区别_python迭代器和for循环区别,相关推荐

  1. python迭代器和生成器的作用_python迭代器与生成器的详细介绍

    一.什么玩意是迭代器? 先说说什么是迭代吧,迭代就是一件事情重复很多次,比如说for循环. for循环可以对一切有iter方法的对象进行迭代,那么什么是iter方法呢? 一个对象是否可迭代,全都取决于 ...

  2. python迭代器两个基本方法_python迭代器如何实现

    迭代是Python最强大的功能之一,是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有 ...

  3. python入门之控制结构-循环结构_Python 入门之控制结构 - 循环结构(一)

    第1关:While 循环与 break 语句 程序的第三大结构是循环结构.在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环.循环语句分为while循环.for循环.循环嵌套 ...

  4. python最基本的两种循环结构_Python基础 — 分支和循环

    1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行,但是有时候在代码中是需要进行逻辑判断的,比如用户 输入用户名和密码,输入正确则验证通过,否则即验证失败.这个时候就会产生 ...

  5. python while循环求和_Python基础——for/while循环

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 上学期间,常常遇到这样的情景:为了惩罚学生,老师会说:"XXX,你先去操场上跑10圈再回来继续反省.&qu ...

  6. python两个for循环顺序_python两个for循环顺序_Python编程基础2——顺序、循环、选择...

    1.课前阅读 1.1学习目标 ①了解Python编程语言中的三大编程结构. ②重点:Python中如何使用顺序.循环.选择结构. ③学习第一个Python库函数. 1.2实践内容 ①学习使用Pytho ...

  7. python中for循环流程图_Python流程控制-while循环-for循环

    写重复代码 是可耻的行为 -------------- 完美的分割线 -------------- 程序在一般情况下是按顺序执行的,编程语言提供了各种控制结构,允许更复杂的执行路径. 循环(loop) ...

  8. python中raise和raise e区别_python raise和assert的区别

    python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...

  9. python while循环跳出_python如何跳出while循环

    先来看代码 person={'name':'Helen','password':'123'} while True: nm=input('请输入用户名') psw=input('请输入密码') if ...

最新文章

  1. jqgrid自定义列表开发=》实现高级查询
  2. python设计模式(三):原型模式—快速实例化类的一种途径
  3. Python学习笔记:Day11 编写日志创建页
  4. LVS(MASTER---NAT)
  5. webapi------宿主程序
  6. java解析json数组对象_JAVA中快速解析JSON对象里包含的JSON数组
  7. FTP主动模式和被动模式学习笔记
  8. 关于SQL Server对于表的一些查询
  9. idea新建类模板注释设置_开发者必备——IDEA配置清单
  10. Openfire 4.1.0
  11. Android的JNI【实战教程】5⃣️---Android Studio 2.2 以上 NDK开发
  12. 修改html颜色代码,JavaScript实现更改网页背景与字体颜色的方法
  13. 业务流程的设计 (附加案例)
  14. 12306分流免费抢票工具
  15. 阿里企业云邮箱怎么申请?企业云邮箱登录界面在哪?
  16. 【动态规划】有后效性 DP
  17. C语言模拟鼠标连点器
  18. 小程序篇1-1:搜索框输入关键字、词检索;点击取消恢复默认状态
  19. 科学计算机解三角函数方程,如何让计算器计算方程如何让fx-82ES的卡西欧计算器解一次,二次,或更高次数方程?是支持三角函数的!...
  20. GridView 72般绝技 转自清清月儿

热门文章

  1. 富文本图片太大溢出以及富文本显示问题
  2. png,jpg转换为ico的方法
  3. 和数集团“区块链+数字化”促进新场景应用落地 为多领域开启无限可能
  4. 新病毒或已潜伏电脑 同样源自美国武器库
  5. Defensive programming
  6. A002-185-2537-翁格婉(个人期末作业)
  7. 小米手环导出心率_小米手环1怎么看心率?
  8. 『HTTP知识点』什么是HTTP协议?(HTTP协议详解)
  9. 生成二维码或条形码JavaScript脚本库
  10. 前端程序员怎么样通过业余时间接单app、小程序订单