查看原文
其他

Python进阶系列连载(4)——迭代器

2017-12-13 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


前文传送门:

Python进阶系列连载(1)——那些容易被忽略的问题(上)

Python进阶系列连载(2)——那些容易被忽略的问题(中)

Python进阶系列连载(3)——那些容易被忽略的问题(下)


如果还没看过我的入门连载部分,先看:

Python从零开始系列连载(25)——Python的random模块简单使用(入门知(姿)识(势)学习的最后一篇(片))


当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一遍~

视频传送门:点击文末阅读原文



迭代


迭代:就像交通工具的发展,越来越好,越来越方便,朝着更好方向发展!【或者说常见的软件版本迭代更新】



让我想起,经常有抽奖类的活动口号是:搏一搏,单车变摩托~



可迭代对象


可迭代对象:在之前学习的基础上,可以简单的理解为可以用for循环遍历的,如学过的list  tuple  dict  set  str


判断一个对象是否是迭代器:


除了写for循环试试,我们还有专业的手段~



我们可以将数据 49 30328 49 14988 0 0 2806 0 0:00:10 0:00:05 0:00:05 2988类型和是否为可迭代对象比较来判断是否是可以迭代~


发现整型是不能迭代的~


迭代器


迭代器:一定是可迭代对象,拥有next()方法


next()方法可以获取迭代器的下一个元素



我们试着对 list 使用 next()方法,发现抛出异常,提示list不是一个迭代器!


所以可迭代对象不一定是迭代器!



我们导入Iterator模块

使用iter方法将list转为了一个迭代器!


然后我们使用next()获取迭代器下一个对象:



当获取完之后,再次获取下一个会抛出异常!


小明:老湿,你说这个迭代器有啥用啊,感觉华而不实!


额,小明啊,迭代器是有很多优点的,比如,我想访问集合中一个元素,你会怎么做?


小明:看我的!



小明啊,如果我要获取一个集合中的元素呢?


小明:这个。。这个。。集合没有索引啊,你不是难为我么?!



所以,这不就是迭代器的优点了么!


看好了:



小明:老湿,在迭代器集合中,如果我想获取前一个元素怎么办?


小明啊,这个问题问得好,这也是迭代器的特点,他只能往后next(),不能回退


除此之外,迭代器还有一大优点是不要求事先准备好整个迭代过程中所有的元素

迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁

这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件


所以有点像内存,我们把正在运行的程序放进内存,运行完就突出内存,每次只放正在运行的进入

充分体现了局部性原理~


小明:我好像懂了!小红,你还不太懂吧,放学我请你吃饭,给你讲讲吧【自信脸】


小红:emmm,我早懂了【高冷脸】


今天作业:

1.自己创建list  tuple  dict  set  str int float bool 类型数据,然后判断是否是可迭代对象

2.将1中的可迭代对象转为迭代器,使用next()方法迭代操作


自己不敲代码永远学不会写代码

下课

人生苦短,我选Python

未完待续,连载中......

欢迎评论指出文中错误和提问~~~

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存