我在

python 3中尝试使用生成器并编写了这个相当人为的生成器:

def send_gen():

print(" send_gen(): will yield 1")

x = yield 1

print(" send_gen(): sent in '{}'".format(x))

# yield # causes StopIteration when left out

gen = send_gen()

print("yielded {}".format(gen.__next__()))

print("running gen.send()")

gen.send("a string")

输出:

send_gen(): will yield 1

yielded 1

running gen.send()

send_gen(): sent in 'a string'

Traceback (most recent call last):

File "gen_test.py", line 12, in

gen.send("a string")

StopIteration

所以gen .__ next __()到达x = yield 1并且得到1.我认为x将被赋值为None,然后gen.send()会查找下一个yield语句,因为x = yield 1是“used”,然后得到一个StopIteration.

相反,似乎发生的事情是x被发送“一个字符串”,打印出来,然后python尝试寻找下一个产量并得到一个StopIteration.

所以我试试这个:

def send_gen():

x = yield 1

print(" send_gen(): sent in '{}'".format(x))

gen = send_gen()

print("yielded : {}".format(gen.send(None)))

输出:

yielded : 1

但现在没有错误.在将x分配给None之后,send()似乎没有尝试查找下一个yield语句.

为什么行为略有不同?这与我如何启动发电机有关吗?

python3 生成器的send_Python:生成器中send()的行为相关推荐

  1. python3 生成器的send_Python3基础 yield send 获得生成器后,需要先启动一次

    ? ???????Python : 3.7.3 ?????????OS : Ubuntu 18.04.2 LTS ????????IDE : pycharm-community-2019.1.3 ?? ...

  2. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

  3. Python生成器generator之next和send运行流程

    对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数. 然后第二个next调用,进入生成器函数后,从y ...

  4. !! javascript_产量! 产量! 生成器如何在JavaScript中工作。

    !! javascript by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 产量! 产量! 生成器如何在JavaScript中工作. (Yield! Yiel ...

  5. 【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )

    文章目录 一.setParent 方法中设置父节点与子节点关系 二.完整代码示例 1.MyBuilderSupport 生成器代码 2.使用 MyBuilderSupport 生成器创建 Xml 代码 ...

  6. python生成器表达式_python 生成器和生成器表达式

    1.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

  7. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  8. Python学习day12(生成器,列表/生成器推导式)

    Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...

  9. 异步生成器_使用生成器实现异步并等待

    异步生成器 Nowadays we can write our asynchronous code in a synchronous way thanks to the async and await ...

  10. python 生成器函数_Python 生成器函数

    def func(): print("我叫周润发") return "林志玲" # return在函数中表示返回的意思 ret = func() print(& ...

最新文章

  1. 分析两小段c++代码 关于unsigned运算的坑
  2. tensorflow tf.Variable 的用法
  3. 《途客圈创业记:不疯魔,不成活》一一2.1 创新工场初印象
  4. mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七)
  5. Delphi XE5 for Android (八)
  6. JAVA中的native
  7. Android 系统(95)---Android build.prop参数详解
  8. PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法
  9. Q77:怎么用Ray Tracing画仿射变换之后的图形
  10. 删除Linux上的用户
  11. php手机i选择图片多选,ios 相册图片多选 带预览功能
  12. web developer tips (18):从工具箱粘贴或拖拽控件时进行绝对定位
  13. 计算机建筑装饰设计入门,07建筑装饰《计算机装饰设计软件实训专用周.doc
  14. 超详细域名和二级域名、子域名免费配置SSL证书变成升级HTTPS(完整配置文件)
  15. 批量删除QQ空间说说和日志的js脚本
  16. mysql rpl_MySQL rpl_semi_sync_master_timeout相关的一件BUG
  17. Python分析抖音数据,让视频爆起来
  18. Houdini vop
  19. 干支纪年法简便算法_初中阶段常用的四种历史纪年法
  20. [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加

热门文章

  1. mysql 插入数据时,出现\xF0\x5F\x6F\x70问题
  2. springboot整合视图层Thymeleaf、freemarker
  3. reactjs生命周期:setState流程 shouldComponentUpdate componentWillUpdate render componentDidUpdate
  4. HBase 2.0 之修复工具 HBCK2 运维指南
  5. docker-compose部署prometheus
  6. k8s设置标签禁止istio边车sidebar注入
  7. Python Django 多表插入之重写save()方法代码示例
  8. Python Django 常用字段类型
  9. 请你解释一下HashMap具体如何实现的?
  10. Linux部署Ant Design Pro项目及nginx部署