您的位置:首页 > 编程语言 > Python开发

零基础学python-19.7 扩展生成器函数

2015-10-21 00:00 344 查看
这一章节我们来讨论一下扩展生成器函数:send函数

回顾一下上一章节我们介绍yield的应用:

>>> def test():
for x in range(3):
yield x

>>> x=test()
>>> next(x)
0
>>> next(x)
1


我们这一章节在next()和__next__()之外,再介绍一个函数send,他主要的作用就是跟生成器通信,并且返回计算结果

下面我先举例:

>>> def test():
for x in range(4):
y=yield x
print(y)

>>> test()
<generator object test at 0x01E69A58>
>>> a=test()
>>> next(a)
0
>>> a.send (99)
99
1
>>> a.send (88)
88
2
>>> a.send (5)
5
3
>>> a.send (6)
6
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
a.send (6)
StopIteration


从上面的代码可以看见,使用send跟next的计算差不多,我们下面来分解一下send的步骤:

1.先把send里面的参数赋值给生成器函数yield x

2.然后再执行print(y)这一句

3.执行生成器函数

4.把控制器交还给函数

注意:第一句是不可以直接使用send,会报错

>>> def test():
for x in range(4):
y=(yield x)+2

>>> a=test()
>>> a.send (5)
Traceback (most recent call last):
File "<pyshell#50>", line 1, in <module>
a.send (5)
TypeError: can't send non-None value to a just-started generator


我们下面再举一个比较明显的例子:

>>> def test():
for x in range(4):
y=(yield x)+2
print(y)

>>> a=test()
>>> next(a)
0
>>> a.send (5)
7
1
>>> a.send (10)
12
2


从上面的代码可以看见,send里面的参数已经真个替代了yield x这个生成器,然后计算y=N+2,得出y的结果,然后再打印出来,接着执行生成器,最后交还控制器并记录函数状态

总结:这一章节讨论了生成器函数的方法send,并且解析send的执行步骤,还有介绍send需要注意的地方。

这一章节就说到这里,谢谢大家

------------------------------------------------------------------
点击跳转零基础学python-目录

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python