第65p,关于:生成器、迭代器与迭代对象(上)

大家好,我是杨数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原创,欢迎关注,带你一起长知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容