文档章节

零基础学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
2018/09/10
0
0
Python3.7最新版本使用说明书,请你保管好!

以下是对Python官网内容的翻译 需要注意的是目前这个版本是Python3.7预计发布的四个预览版本之三。 Python Release Python 3.7.0b3 Python数据类 Python生成器异常处理 在Python 3.7中,生成...

糖宝lsh
2018/12/28
0
0
D04-C语言基础学PYTHON

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

m1racle
2018/08/14
0
0
python(六)切片,生成式,生成器,迭代

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

Koma
2015/01/20
0
0
《Python有什么好学的》之生成器/迭代器

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

煎鱼不可能有BUG
2018/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
3
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部