大家好,我是杨数Tos,这是《从零基础到大神》系列课程的第65篇文章,第三阶段的课程:Python进阶知识:生成器、迭代器与迭代对象。

一、什么是可迭代对象?

迭代是一个重复的过程,迭代每次的重复都是基于上一次的结果;如果单纯的重复并不是迭代;

下面这张图片会用一个简单的案例说明迭代与循环的区别:

由于可迭代对象是一种比较抽象的概念,我们可以用这样的方式区分可迭代对象;在Python中只要内置有__iter__()方法的对象都称之为可迭代对象。

二、迭代器?

1、什么是迭代器?

器是工具,迭代器指的是迭代取值的工具。

2、为什么会有迭代器?

如果我们使用索引取值的方式获取对象内的元素,可以获取到对象内所有元素的值;但是,对于一些没有索引的对象,如字典,通过索引取值的方式是无法获取字典中元素的值;

为了解决基于索引取值的局限性,Python提出了一种迭代取值的方式,这就是迭代器(iterator);只要是可迭代对象,都能进行迭代取值;

调用可迭代对象下的__iter__方法,可以得到该迭代对象的迭代器对象,即:可迭代对象可以转换成迭代器对象。

将可迭代对象转成迭代器对象以后,迭代器对象内有一种__next__()方法,使用__next__()方法就可以进行迭代取值。每执行一次__next__()方法就能取得迭代器中的返回值;当迭代器的值被取完,再次取值会发出报错信息。

3、可迭代对象与迭代器的不同:

可迭代对象只能通过索引取值的方式(即:__iter__()方法);迭代器对象不仅可以通过索引取值,也可以通过__next__()方法取值;

4、用for循环的工作原理说明迭代器:

① 将被循环的数据调用__iter__()方法,将数据转换成为迭代器对象,如果数据本身是迭代器对象,调用__iter__()方法也是在调用迭代器本身,并没有发生任何变体;

② 基于迭代器对象,调用__next__()方法进行迭代取值,拿到__next__()的返回值;

③ 将返回值赋值给i

④ 循环往复以上步骤,迭代器对象只的值被取尽,抛出StopIteration异常,for循环会捕捉异常并结束循环。

所以while循环可以称为条件循环,for循环可以称为迭代器循环。

只要是迭代器对象都相当于执行了for循环;所以我们在进行数据类型转换的时候,如果字符串转换成列表x = list(str),这里调用了list方法其实就是调用了迭代器对象进行了for循环,所以会将字符串打散成一个个字符,变成列表(list)中的一个元素。

如:list(“杨数Tos”)与for的原理相同,得到的结果是:['杨', '数', 'T', 'o', 's']。

5、迭代器对象优缺点总结:

优点:

a. 获得了一种统一取值的方案,不管是有序类型还是无序类型都可以使用同一方法进行取值;

b. 更节省内存,数据只要被使用时,__next__()方法才会触发并生成新的数据,就像一只生蛋的鸡,不用事先把所有的蛋生出来,只有调用时,才会生出新的蛋;

缺点:

A. 不能索引取值这样,可以取指定的值,比如取第3个值,使用索引取值可以直接获取,使用迭代器必须先把前两个值取出来 ,才能获取到第3个值。

B. 迭代器具有生命周期,迭代器内的值取完以后,再次取值会发生报错。

C. 除非迭代器内的值被取尽,否则无法获取迭代器的长度。

D. 只能取下一个值,不能回到开始,

以上是本期内容,如果有表达不对的内容,欢迎您的留言、斧正,我们一起天天向上。

感谢您的阅读,您的三连【关注、点赞、收藏】就是对我最大的支持,谢谢!

本文由杨数Tos原创,欢迎关注,带你一起长知识。

uniapp对象怎么获取值_第65p,关于:生成器、迭代器与迭代对象(上)相关推荐

  1. 怎么确定迭代器后面还有至少两个值_如何理解Python中的可迭代对象、迭代器和生成器

    ▍前言 在讨论可迭代对象.迭代器和生成器之前,先说明一下迭代器模式(iterator pattern),维基百科这么解释: 迭代器是一种最简单也最常见的设计模式.它可以让用户透过特定的接口巡访容器中的 ...

  2. python 生成器对象_Python 生成器, 迭代器, 可迭代对象的区别

    1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...

  3. uniapp对象怎么获取值_原理 | 怎么获取PMSM电机转子位置Offset值

    更多,更及时的干货内容,请加我们的微信公众号:wc_dj8 诚邀业内人士及机构向我们投稿,投稿有礼 投稿邮箱:tougao@51wctt.com 来源| 网络 问题: PMSM电机,如果电机铭牌上的o ...

  4. python 列表生成式_深度好文:Python之列表生成式、生成器、可迭代对象与迭代器(一)...

    作者:云游道士 原文:https://www.cnblogs.com/yyds/p/6281453.html 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterab ...

  5. es6 获取对象的所有值_前端开发必备 - ES6 新特性之 Set和Map数据结构

    往期回顾: 前端开发必备 - ES6 新特性之 let 和 const 命令 前端开发必备 - ES6 新特性之 变量的解构赋值 前端开发必备 - ES6 新特性之 字符串的拓展 前端开发必备 - E ...

  6. js map遍历 修改对象里面的值_求职季之你必须要懂的原生JS(上)

    点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 互联网寒冬之际,各大公司都缩减了HC,甚至是采取了"裁员"措施,在这样的大环境 ...

  7. nsdictionary获取值_获得nsdictionary值

    Object C学习笔记13-Dictionary字典 通过Array数组和Set集合的学习和理解,可以想象得到Dictionary也分为两种情况了,那就是可变和不可变两种类型的.的确如此,在Obje ...

  8. 每个python对象都具有布尔值_百度T7架构师透析Python对象你需要知道这些

    1. Python对象 Python使用对象模型来存储数据.构造任何类型的值都是一个对象. 所有的Python对象都拥有三个特性:身份,类型和值. 身份: 每一个对象都有一个唯一的身份标识自己,任何对 ...

  9. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...

    笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...

最新文章

  1. java8 时间加一秒_年货买瓜子有讲究!这些加了“料”的瓜子不安全!
  2. 身限辞退风波,Google AI 掌门人 Jeff Dean 不误折桂 IEEE 冯诺依曼奖
  3. 工厂参观记:.NET Core 中 HttpClientFactory 如何解决 HttpClient 臭名昭著的问题
  4. Ms Sql Server 2005的数据库快照功能使用实践
  5. 【补充一则】身份证校验的c#代码
  6. python手写数字识别实验报告_机器学习python实战之手写数字识别
  7. 【luogu3834】【模板】可持久化线段树 2(主席树),静态区间第K小值
  8. 《linux核心应用命令速查》连载二:lastcomm:显示以前使用过的命令的信息
  9. python运维开发_python运维开发
  10. cad无法安装_装机必备!免安装CAD迷你看图特别版PC软件
  11. BT5 U盘制作方法
  12. 解除电脑宽带限制,提升电脑网速
  13. Android数据库更新并保留原来数据的实现
  14. 所以,网络工程师能从事什么工作?
  15. 【学习小结】树上的概率、期望问题,树上高斯消元
  16. 智能照明控制系统 在医院中的设计和应用
  17. [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  18. JAVA-面向过程编程
  19. 齐博x1如何调用系统自定义字段
  20. 《我从起点开始奔跑》

热门文章

  1. 腾讯发现Google Home首个无接触攻破漏洞
  2. 《直播疑难杂症排查系列》之一 :播放失败
  3. Nginx RTMP 功能研究
  4. 使用crontab定时保存top信息到文件,并保存到数据库中
  5. Hbase 01_初学必知
  6. 网络与IO知识扫盲(五):从 NIO 到多路复用器
  7. 网络IO发展历程:BIO、NIO、多路复用器、epoll
  8. 【Python】简单的apscheduler定时任务
  9. 5分钟让你了解 ZooKeeper 的功能和原理
  10. Kotlin协程简介(一)