文档章节

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

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 504
阅读 1
收藏 0
点赞 0
评论 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(六)切片,生成式,生成器,迭代

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

Koma
2015/01/20
0
0
python生成式生成器详细解答

Python得yield关键字,yield是python中的生成器 了解生成器需要先了解什么是生成式,切片的目的是从已有的列表中切出一部分返回,而生成式的目的则是从无到有的构建一个列表 一个生成式的案例...

开源中国段子手
2015/07/21
0
0
Python进阶系列连载(13)——Python内置高阶函数filter(下)

前言 进阶部分连载继续~ 如果还没看过我的入门连载部分,先看: https://ask.hellobi.com/blog/wangdawei/10288 当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一...

ID王大伟
04/28
0
0
Python 3.5 协程究竟是个啥

原文链接 : How the heck does async/await work in Python 3.5? 原文作者 : Brett Cannon 译文出自 : 掘金翻译计划 译者 : @Yushneng 校对者: @L9m,@iThreeKing 作者是 Python 语言的核心开...

好铁
2017/10/23
0
0
Python3+迭代器与生成器

转载Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的...

xinet
2017/08/12
0
0
更深入的理解 Python 中的迭代

深入探讨 Python 的 循环来看看它们在底层如何工作,以及为什么它们会按照它们的方式工作。 Python 的 循环不会像其他语言中的 循环那样工作。在这篇文章中,我们将深入探讨 Python 的 循环来...

01%
05/26
0
0
关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实...

劲风online
2015/07/20
0
0
Python函数式编程指南(四):生成器

生成器是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。 这是函数式编程指南的最后一篇,似乎拖了一...

fjie
2013/10/23
0
0
人人都能学会的python编程教程15:高级特性2

生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就...

编程老司机
05/10
0
0
从python协程理解tornado异步

博客原文地址:http://www.v2steve.com/2015/05/31/python/pytornadoasync/ 刚接触tornado时候最疑惑的问题就是tornado.gen.coroutine是怎么实现的。如何在代码中用同步格式实现异步效果。看...

__Steve__
2015/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OpenMessaging概览

序 本文主要研究一下OpenMessaging 架构图 namespace,类似cgroup的namespace,用来进行安全隔离,每个namespace有自己的producer、consumer、topic、queue等 producer,消息生产者有两类,一...

go4it
6分钟前
0
0
MySQL索引类型

MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引

灯下草虫鸣_
7分钟前
0
0
spring boot2.x设置quartz对一个job顺序执行

背景 使用quartz时,如果一个job的是1分钟,但是执行却要2分钟,quartz默认的是不会等job执行结束后,再执行下一次job,默认是会再开启一个线程执行该次job,这就可能导致一些重复执行的BUG...

EasyProgramming
12分钟前
0
0
iOS定向阴影的探讨

view.layer.shadowColor = [UIColor blackColor].CGColor; view.layer.shadowOpacity = 0.8f; view.layer.shadowRadius = 4.f; view.layer.shadowOffset = CGSizeMake(0,0); ......

RainOrz
23分钟前
0
0
oracle使用jdbc报错Locale not recognized解决方法

在开启数据库连接之前和之后添加时区参数:

源哥L
28分钟前
0
0
django2.0正则表达

re_path("userdetail-(?P<nid>\d+)/",views.user_detail), 解析时用re_path 否则出现not find page

南桥北木
30分钟前
0
0
Mac 安装jd-gui

安装brew 命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 回车 安装jd-gui brew cask install jd-gui......

张欢19933
38分钟前
0
0
占坑

00000000000000000000000000000000000000000000000

钟元OSS
38分钟前
0
0
编程学习读书笔记之jQuery函数应用学习心得(图)

编程学习读书笔记之jQuery函数应用学习心得(图) jQuery.extend() 函数 用于将一个或多个对象的内容合并到目标对象。 1.当提供两个或多个对象给.extend(),对象的所有属性都添加到目标对象(...

原创小博客
40分钟前
0
0
linux 给用户加sudo权限

1、用root帐号登录或者su到root。 2、增加sudoers文件的写权限: chmod u+w /etc/sudoers 3、vim /etc/sudoers 找到 root ALL=(ALL) ALL 在这行下边添加 dituhui ALL=(ALL) ALL (ps:dituhui代...

yeahlife
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部