先来一个简单地例子:

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. 测试用例设计方法_测试用例设计方法——流程分析法(场景法)

    测试用例设计方法中,流程分析方法又称为场景法,是根据不同的业务场景来编写测试用例. 流程分析主要包括三个流程: 1.   基本流:也就是正向流程,通过业务流程输入都为正确的,能够最终达到目标的流程.如 ...

  2. Python生成器对象send()方法用法

    关于生成器基本用法请参考详解Python生成器函数和生成器对象的原理和用法 >>> def f():     yield from 'abcdefg'     #使用yield表达式 ...

  3. Python生成器的send方法、递推函数、匿名函数及常用内置函数

    1.生成器的send方法 在使用yield方法创建生成器时,不仅可以使用next方法进行取值,还可以通过send方法向生成器的内部传值 1.1 什么是send方法? send方法相当于高级的next方 ...

  4. python生成器的send方法

    官方文档: generator.send(value) 恢复执行并向生成器函数"发送"一个值. value 参数将成为当前 yield 表达式的结果. send() 方法会返回生成 ...

  5. python利用什么来写模块-Python模块的制作方法实例分析

    本文实例讲述了Python模块的制作方法.分享给大家供大家参考,具体如下: 1 目的 利用setup.py将框架安装到python环境中,作为第三方模块来调用, 2 第一步:完成setup.py的编写 ...

  6. python socket send_Python socket.send方法代码示例

    本文整理汇总了Python中socket.send方法的典型用法代码示例.如果您正苦于以下问题:Python socket.send方法的具体用法?Python socket.send怎么用?Pyth ...

  7. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  8. 高通平台环境搭建,编译,系统引导流程分析 .

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  9. python计算时间差的方法_如何计算时间差,用Python算法的话

    这篇文章主要介绍了python计算时间差的方法,实例分析了Python时间操作的相关模块与技巧,需要的朋友可以参考下 本文实例讲述了python计算时间差的方法.分享给大家供大家参考.具体分析如下: ...

  10. Python生成器(send,close,throw)方法详解

    <Python生成器>一节中,详细介绍了如何创建一个生成器,以及生成器的基础用法.本节将在其基础上,继续讲解和生成器有关的一些方法. Python生成器send()方法 我们知道,通过调用 ...

最新文章

  1. 孩子,来生我们一起走
  2. Spoj LCS2 - Longest Common Substring II
  3. CentOS 初体验十:文件权限查看和修改
  4. 《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】
  5. 清除浮动塌陷的4种经典套路
  6. springboot读取properties(yml)的几种常用方式
  7. Soul Api 网关发布 1.0.3-RELEASE 版本
  8. 注册中验证码实现(项目案例)
  9. 深入理解JVM虚拟机之高效并发
  10. Windows 环境搭建Redis集群之无脑教程
  11. 寻找春天nbsp;九宫格日记-2014.04.26
  12. 清华操作系统课程(向勇、陈渝)笔记——第十二章(一)(基本概念:文件系统和文件,文件描述符,目录,文件别名,文件系统种类)
  13. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(1):二阶与三阶行列式、全排列及其逆序数
  14. openGL中的抗锯齿实现
  15. 开发系统所需的服务器,开发软件的服务器需要什么配置
  16. 【科普常识:常用音频参数解析】
  17. oracle 如何取去年,oracle 获取当前日期 去年日期 上年日期
  18. Python---涂鸦跳跃
  19. LeetCode 1109. 航班预订统计
  20. 【2021/12/25】 thinkphp源码无差别阅读(三)

热门文章

  1. jmeter 线程执行顺序_JMeter基础之--元件的作用域与执行顺序
  2. MyBatis 学习之路其一:使用mybatis 创建一个简单的程序
  3. Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)
  4. Android measure过程分析
  5. 一文看懂测试自动化的玄妙
  6. redis04-----Hash 哈希数据类型相关命令
  7. 偏差、方差和噪声的权衡关系
  8. php微信支付接口开发程序(一)
  9. iOS的QuickTime Plugin
  10. postfix和dovecot架设邮件服务器的一些记录1