Python:generator的send()方法流程分析
先来一个简单地例子:
def foo():print('starting')while True:r = yield 2print(r)f = foo() print(f.send(None)) print(f.send(1))
结果如下:
starting 2 1 2
讲解:
1 f = foo() 这句表示生成一个generator对象
f = foo() print(type(f)) #<class 'generator'>
2 f.send(None) 的作用与 next(f) 的作用相同:运行代码到 r = yield 2 处。 r = yield 2 主要分两步:
第一步: yield 2 ,也就是先返回2
第二步: r = (yield) 这里用括号把yield包起来是为了突出yield是一个表达式expression:可以用来表示某个值。
f.send(None) 或者说 next(f) 仅仅运行到了第一步,也就是返回了2,然后被print()函数打印到屏幕
3 f.send(1) 运行第二步,将1赋值给r ,然后运行print(r),再一次运行到 r = yield 2 处时,也仅仅只运行第一步,也就是返回2,然后由print()函数打印到屏幕。
注意以下情况不会报错:
def foo():yield 1yield 2yield 3f = foo() r = next(f) print(r) for i in range(2):r = f.send('hello world')print(r)# 结果 1 2 3
也就是说send非空值时,即使yield语句前没有变量接收send的值,程序不会报错
转载于:https://www.cnblogs.com/MnCu8261/p/6527175.html
Python:generator的send()方法流程分析相关推荐
- 测试用例设计方法_测试用例设计方法——流程分析法(场景法)
测试用例设计方法中,流程分析方法又称为场景法,是根据不同的业务场景来编写测试用例. 流程分析主要包括三个流程: 1. 基本流:也就是正向流程,通过业务流程输入都为正确的,能够最终达到目标的流程.如 ...
- Python生成器对象send()方法用法
关于生成器基本用法请参考详解Python生成器函数和生成器对象的原理和用法 >>> def f(): yield from 'abcdefg' #使用yield表达式 ...
- Python生成器的send方法、递推函数、匿名函数及常用内置函数
1.生成器的send方法 在使用yield方法创建生成器时,不仅可以使用next方法进行取值,还可以通过send方法向生成器的内部传值 1.1 什么是send方法? send方法相当于高级的next方 ...
- python生成器的send方法
官方文档: generator.send(value) 恢复执行并向生成器函数"发送"一个值. value 参数将成为当前 yield 表达式的结果. send() 方法会返回生成 ...
- python利用什么来写模块-Python模块的制作方法实例分析
本文实例讲述了Python模块的制作方法.分享给大家供大家参考,具体如下: 1 目的 利用setup.py将框架安装到python环境中,作为第三方模块来调用, 2 第一步:完成setup.py的编写 ...
- python socket send_Python socket.send方法代码示例
本文整理汇总了Python中socket.send方法的典型用法代码示例.如果您正苦于以下问题:Python socket.send方法的具体用法?Python socket.send怎么用?Pyth ...
- 高通Android智能平台环境搭建_编译流程分析
高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...
- 高通平台环境搭建,编译,系统引导流程分析 .
1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...
- python计算时间差的方法_如何计算时间差,用Python算法的话
这篇文章主要介绍了python计算时间差的方法,实例分析了Python时间操作的相关模块与技巧,需要的朋友可以参考下 本文实例讲述了python计算时间差的方法.分享给大家供大家参考.具体分析如下: ...
- Python生成器(send,close,throw)方法详解
<Python生成器>一节中,详细介绍了如何创建一个生成器,以及生成器的基础用法.本节将在其基础上,继续讲解和生成器有关的一些方法. Python生成器send()方法 我们知道,通过调用 ...
最新文章
- 孩子,来生我们一起走
- Spoj LCS2 - Longest Common Substring II
- CentOS 初体验十:文件权限查看和修改
- 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
- 清除浮动塌陷的4种经典套路
- springboot读取properties(yml)的几种常用方式
- Soul Api 网关发布 1.0.3-RELEASE 版本
- 注册中验证码实现(项目案例)
- 深入理解JVM虚拟机之高效并发
- Windows 环境搭建Redis集群之无脑教程
- 寻找春天nbsp;九宫格日记-2014.04.26
- 清华操作系统课程(向勇、陈渝)笔记——第十二章(一)(基本概念:文件系统和文件,文件描述符,目录,文件别名,文件系统种类)
- 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(1):二阶与三阶行列式、全排列及其逆序数
- openGL中的抗锯齿实现
- 开发系统所需的服务器,开发软件的服务器需要什么配置
- 【科普常识:常用音频参数解析】
- oracle 如何取去年,oracle 获取当前日期 去年日期 上年日期
- Python---涂鸦跳跃
- LeetCode 1109. 航班预订统计
- 【2021/12/25】 thinkphp源码无差别阅读(三)