零基础学python-19.7 扩展生成器函数
零基础学python-19.7 扩展生成器函数
raylee2015 发表于2年前
零基础学python-19.7 扩展生成器函数
  • 发表于 2年前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

这一章节我们来讨论一下扩展生成器函数: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
共有 人打赏支持
粉丝 7
博文 265
码字总数 44224
×
raylee2015
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: