Python 语言学习 第六篇:迭代和解析

 Python中的迭代是指按照元素的顺序逐个调用的过程,迭代概念包括:迭代协议、可迭代对象和迭代器三个概念。

迭代协议是指有__next__()函数的对象会前进到下一个结果,而到达系列的末尾时,则会引发StopIteration异常。为了支持迭代协议,Python内置了两个函数:iter()和next()函数。iter()从可迭代对象中获得一个迭代器,迭代器含有next()函数。next()函数的作用就是调用对象的__next__()函数,从而递进进到下一项。

在Python中,任何支持迭代协议的对象都是可迭代的。如果对象是序列类型,或者在迭代工具中一次产生一个结果,那么就是可迭代的,这就以为着,序列(字符串、元组和列表)是可迭代对象。

迭代器是Python中实现迭代协议的对象,具体指的是iter()返回的,支持next()函数的对象。

Python中的迭代工具会自动调用iter()和next()函数以实现迭代,迭代工具主要有:for循环、列表解析、in成员关系测试以及map内置函数等。

一,手动迭代

列表不是自身的迭代器,对于这样的可迭代对象,可以调用iter()函数来启动迭代,调用next()函数递进到下一项:

复制代码
>>> a=list(range(0,5)) >>> a is iter(a) False >>> a=iter(a) >>> next(a) 0
复制代码

像for循环等迭代工具,会自动调用iter()和next()函数,以实现序列的自动迭代:

复制代码
>>> for i in range(0,5): print(i,end=' ') 0 1 2 3 4 
复制代码

二,生成器

生产器是一个延迟产生结果的工具,在需要的时候才产生结果,而不是立即产生结果。

1,生成器函数

Python提供了yield语句以实现生成器函数,以实现在需要的时候才产生结果,而不是立即产生结果。Python的生产器函数是指:编写为常规的def语句,但是使用yield语句,一次返回一个结果,在每个结果之间挂起和继续的状态。 

生产器函数自动实现迭代协议,每次调用只返回一个值,下次调用时,会从其退出的地方继续执行。

生产器函数和常规函数的不同之处在于:生产器yield一个值,而不是return一个值。yield语句挂起该函数,并向调用者发送一个值,但是,保留足够的状态以使得函数能够从它离开的地方继续执行。当继续时,函数在上一个yield返回后继续执行。这使得生产器函数每次调用只返回一个值,穷尽调用会产生一系列的值。

复制代码
>>> def seq_int(n):     for i in range(n):         yield i**2    >>> for i in seq_int(5):     print(i,end =' ')    0 1 4 9 16 
复制代码

生产器函数返回的对象就是迭代器,可以使用next()前进到下一项:

复制代码
>>> func=seq_int(5) >>> iter(func) is func True >>> next(func) 0
复制代码

2,生产器表达式

另外一个实现生产器的对象是生产器表达式,从语法上讲,生成器表达式是在小括号中的表达式。从执行过程来讲,生产器表达式不在内存中构建结果,而是返回一个生成器对象,这个对象支持迭代协议。

复制代码
>>> a=(x**2 for x in range(0,5)) >>> a is iter(a) True
复制代码

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信