有一段时间没给大家分享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 A
2 B
3 C
d:使用for\while循环迭代
使用for循环迭代,在上面的代码中已经有展示
>>> fjh={'A','B','C'}
>>> it=iter(fjh)
>>> while True:
try:
print(next(it))
except StopIteration as fsh:
print('迭代结束')
break
A
B
C
迭代结束
小结:
1:凡是可作用于for循环的对象都是Iterable类型
2:凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
3:集合数据类型如list,dict,str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。