文档章节

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

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 504
阅读 2
收藏 0

这一章节我们来讨论一下扩展生成器函数: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-目录



版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/raylee2007/article/details/48850943

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0
《Python有什么好学的》之生成器/迭代器

“Python有什么好学的”这句话可不是反问句,而是问句哦。 主要是煎鱼觉得太多的人觉得Python的语法较为简单,写出来的代码只要符合逻辑,不需要太多的学习即可,即可从一门其他语言跳来用P...

煎鱼不可能有BUG
11/07
0
0
D04-C语言基础学PYTHON

C语言基础学习PYTHON——基础学习D04                          20180810内容纲要:   1 内置函数   2 装饰器   3 生成器   4 迭代器   5 软件目录结构规...

m1racle
08/14
0
0
基于编程人员Python学习第一章节

基于廖雪峰的python零基础学习后,自我总结。适用于有一定基础的编程人员,对我而言,则是基于.net已有方面,通过学习,记录自我觉得有用的地方,便于后续回顾。 主要以快速定位内容,通过直...

Aikenwu
08/13
0
0
python(六)切片,生成式,生成器,迭代

有了前面的基础,其实掌握的比较扎实的话还是能够做出一些简单的东西的,至少解决一些个基本的数学题还是问题不大,比如说实现一个斐波那契数列,杨辉三角什么的。多数情况下使用循环 for .....

Koma
2015/01/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS切面编程

aop编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在iOS中,要想实现相似的效果也很简单,利用OC的动态性,...

RainOrz
10分钟前
1
0
0006-Zookeeper指标分析

1. 问题描述 通过CDH管理平台,进入Zookeeper管理界面,Zookeeper的平均请求延迟、最小请求延迟、最大请求延迟指标趋势图维持不变,指标数据异常。 2.问题复现 登录CDH平台,进入Zookeeper管...

Hadoop实操
18分钟前
1
0
PAT(Basic Level) 乙级练习题 ------ 1047 编程团体赛 java

1047.编程团体赛 题目: 编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。 现给定所有队员的比赛成绩,请你编写程序找...

Carol998
22分钟前
1
0
抓包

1、下载 2、 tcpdump -i em1 host 目标域名 -n -X -s0 -w 写入文件名

HenryZhou2
24分钟前
1
0
axios 实现下载excel文件的说明~~~~遇到一个大坑,还是没有熟悉源码的罪过

本来下载文件直接用a标签,非常easy,但是如果数据量巨大的话,没有loading效果,用户体验非常差。优化项目的时候领导要求必须修改。因此只能用axios来下载了。 a标签下载: <a :href="dow...

YJ_
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部