python大作战之迭代器初级篇
来源:互联网 发布:如何用手机淘宝装修 编辑:程序博客网 时间:2024/04/29 11:11
有一段时间没给大家分享python了,其实我也是很着急的,原因是我最近在学习装饰器,迭代器和生成器,同时也在想怎么能让大家一目了然
的看懂我所写的东西,那么今天就跟大家一起先来认识下迭代器。
大家知道,可以直接作用于for循环的数据类型有哪几种吗?
一类是集合数据类型,如list,tuple,dict,set,str等
一类是generator,包括生成器和带yield的generator function(这个后续会跟大家分享生成器,暂时在这里不提)
这些可以直接作用于for循环的对象统称为可迭代对象------Iterable
本次主要围绕下面四个方面:
1:iter()函数和next函数
2:stopiteration异常
3:使用for\while循环迭代
4:迭代str,list,tuple,dict
a:首先我们来讲iter()函数和next函数:
>>> fjh=['tom','amy','lily']>>> x=iter(fjh)>>> print(type(x))<class 'list_iterator'>从代码中可以看出使用iter()函数,实际上就得到一个迭代器,我们可以使用type来查看它的数据类型
另外对于next()函数:
>>> fjh=['tom','amy','lily']>>> it=iter(fjh)>>> print(next(it))tom>>> print(next(it))amy>>> print(next(it))lily从代码中可以看出next()可以计算出元素的值,next()是python中内置函数,后续会跟大家交流
b:对于stopiteration异常
如果按照上面所给的代码,再次调用内置函数next(),就会抛出异常
>>> print(next(it))Traceback (most recent call last): File "<pyshell#39>", line 1, in <module> print(next(it))StopIteration因为没有更多的元素可以遍历吧。
c:对于迭代集合数据类型
>>> fjh=['tom','amy','lily']>>> fjh1=('tom','amy','lily')>>> fjh2='学习python'>>> fjh3={'tom','amy','lily'}>>> it=iter(fjh)>>> it1=iter(fjh1)>>> it2=iter(fjh2)>>> it3=iter(fjh3)>>> print(next(it))tom>>> print(next(it1))tom>>> print(next(it2))学>>> print(next(it3))lily但是对于字典,这里需要单独列出来
>>> fjh={1:'A',2:'B',3:'C'}>>> it=iter(fjh)>>> for x in it:print(x,fjh[x])1 A2 B3 Cd:使用for\while循环迭代
使用for循环迭代,在上面的代码中已经有展示
>>> fjh={'A','B','C'}>>> it=iter(fjh)>>> while True:try:print(next(it))except StopIteration as fsh:print('迭代结束')breakABC迭代结束小结:
1:凡是可作用于for循环的对象都是Iterable类型
2:凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
3:集合数据类型如list,dict,str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
阅读全文
0 0
- python大作战之迭代器初级篇
- python大作战之排序
- python大作战之集合
- python大作战之生成器
- python大作战之字典表(dict)--基础篇
- python大作战之文件读写进阶篇
- python序列大作战之可变序列
- python大作战之文件读写(r+,w+,a+)特别篇
- python大作战之不可变序列(元组tuple)
- python大作战之文件的读写操作(初学片)
- python大作战之递归和高阶函数
- python大作战之*args和**kwargs的区别
- 博弈论大作战之 PART1
- 博弈论大作战之 PART2
- 孙子兵法之作战篇
- 《孙子兵法》之作战篇
- 孙子兵法之作战篇
- java之旅之习题大作战
- mosca 实现mqtt协议的中间消息存储
- Spring AOP & AspectJ之基础应用
- sublime常用快捷键和代码加速写法
- Android中使用WebService
- winform上视图模型双向绑定 TView 的使用
- python大作战之迭代器初级篇
- java基础-new String(byte[] b, int n, int m)
- 图像质量评估指标 SSIM / PSNR / MSE
- BZOJ4421
- 1-进程和线程的由来和区别
- Aladdin and the Flying Carpet LightOJ
- STM32之GPIO口
- git学习——Github关联(2)
- python多进程