给妹子讲python-S01E15迭代环境

浏览: 1036

作者:酱油哥/ 清华程序猿       

微信公众号: python数据科学家 

知乎专栏: 《给妹子讲python》
https://zhuanlan.zhihu.com/c_147297848


前文传送门:

给妹子讲python-S01E01好用的列表

给妹子讲python-S01E02学会用字典

给妹子讲python-S01E03元组的使用

给妹子讲python-S01E04容器遍历和列表解析式

给妹子讲python-S01E05字符串的基本用法

给妹子讲python-S01E06字符串用法进阶

给妹子讲python-S01E07字符编码历史观:从ASCII到Unicode

给妹子讲python-S01E08理清python中的字符编码方法

给妹子讲python-S01E09文件操作小意思

给妹子讲python-S01E10动态类型与共享引用

给妹子讲python-S01E11赋值与对象拷贝

给妹子讲python-S01E12循环迭代初体验

给妹子讲python-S01E13循环迭代高级技巧

给妹子讲python-S01E14可迭代对象和迭代器

【要点抢先看】

1.使用迭代协议的逐项扫描工具可以称之为迭代环境
2.迭代环境还包含很多可以传入可迭代对象的内置方法
3.常用迭代环境:列表解析式
4.可迭代对象优势总结

【妹子说】这几节都在谈论迭代这个话题呀。

是啊,作为对上一节的补充,这一节我们继续来说说迭代环境这个话题。

Python中,从左到右扫描的每种工具都使用了之前介绍的迭代协议,都可以称之为迭代环境,如for循环表达式、列表解析式、in成员关系测试,map内置函数,sorted和zip等调用等,都可以传入一个可迭代对象,进行迭代。

Sorted对可迭代对象中的各项进行排序,zip对可迭代对象中的各项进行组合,enumerate对可迭代对象中的各项进行位置值配对,他们都接受一个可迭代对象作为参数。

同时zip、enumerate和filter调用的结果是返回一个可迭代对象,可以利用list函数调用来进行展现。只有sorted函数的结果是返回一个真正的列表。

print(sorted(open('myfile.txt')))

['goodbyt text file\n''hahahahah\n''hello text file\n']

当然,还包括一些其他的内置方法,如sum,any,all,max,min都可以传入任何可迭代对象。本质是接受任何可迭代对象作为一个参数,并且使用迭代协议来扫描处理,并返回结果。

更扩展的来说,一般意义上,能从左到右的扫描一个对象的各种工具,实质上都在主体对象上使用了迭代协议,这么看的话,还包括了list和tuple、set内置函数,他们也是通过迭代协议扫描可迭代对象,构建新的对象。还有字符串join方法,它将一个子字符串放置到一个被包含在可迭代对象的字符串之间,这么想想,迭代的概念确实在python中无处不在,甚至包括赋值,也有这么点味道。看看下面分别举的几个例子。

print(list(open('myfile.txt')))

['hello text file\n''goodbyt text file\n''hahahahah\n']

-

print(tuple(open('myfile.txt')))

('hello text file\n''goodbyt text file\n''hahahahah\n')

-

print('&&'.join(open('myfile.txt')))

hello text file
&&goodbyt text file
&&hahahahah

-

a,b,c = open('myfile.txt')
print(a,b,c)

hello text file
goodbyt text file
Hahahahah

我们最后俩回顾一下列表解析式。列表解析式也是最常应用迭代协议的环境之一,他与for循环一起使用。

L = [1,2,3]
L1 = [x+3 for x in L]

Python在解释器内部执行一个遍历L的迭代,按照顺序把X赋给每个元素,并且对各元素运行左边的表达式,并将结果收集为一个列表,我们得到的结果列表就是列表解析所表达的内容,上面的例子中包含了针对L中每个元素x运行x+3的一个新列表。这种列表解析的方式比手动的for循环更快,因为他们的迭代在解释器内部是以C语言的速度执行的。

lines = [line.rstrip() for line in open('myfile.txt')]
print(lines)

['hello text file''goodbyt text file''hahahahah']

【妹子说】这几节可是被迭代二字反复轰炸呀,先介绍了循环迭代的基本用法和高级技巧,然后介绍了迭代协议、可迭代对象以及迭代器,最后学习了迭代环境。

对,内容不少啊。最后我们再次总结一下可迭代对象的好处:

如果函数返回的结果是可迭代对象,那么他意味着是根据请求依次一个一个的返回结果,而不是一次性的构建整个列表。这可以节约内存,根据需要产生结果。这对较大的程序来说很有用,在计算很大的结果列表的时候,像这样做,能很好的节约内存。

本节介绍的字典的一些方法keys、values、items以及内置函数range、map、zip、filter都是如此,他们都会返回可迭代对象。

根据需要产生数据,而不是在内存中构建一个结果列表,从而达到节约内存空间的目的,这是可迭代对象最重要的好处。

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

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

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

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

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

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

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

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


推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册