之前一篇生成器讲了通过yield完成生成器的创建,并且通过next方法获取每一次yield的值。

这一篇讲一下yield的另一个方法,send

def func1():  # 生成器函数print("ok1")x = 10  # 函数内局部变量x赋值为10print(x)x = yield 1  # 这里就是send函数的关键# 之前我们创建的生成器,yield左边都是没有值(我现在不是很确定这里是不是应该叫做返回值,那就先用值代替)。# 现在我们的x会接收到一个值,这个值是什么,从哪里来的?我们继续看下去print(x)yield x  # 这里试第二个断点f1 = func1()  # 获取生成器对象
ret1 = next(f1)  # 运行到第一个yield
# ret1 = f1.send(None) #(这一句语句需要全部看完回头再看)当第一次执行生成器的时候,他并没有执行到yield这个位置,所以你一点传值,就会出现问题
# 谁去接收?没有对象接收就会报错,所以第一次如果一定要用send去调用,那就传一个None
print(ret1)  # 打印第一个yield返回的值
#########################################
# 关键点来了
# 我们现在有两个问题,x = yield 1,这个x的值是什么,从哪里来
# 当下面这条语句运行后,他会将x的值赋值为send方法的参数,并且继续执行到下一个yield
ret2 = f1.send('eee')
print(ret2)# ok1
# 10
# 1
# eee
# eee# 问题都解决了,然后还有一个顺序的问题,我先把我测试的结论提出来,大家可以自己打断点尝试一下,欢迎拍砖
# f=func1()
# next(f)或者f.send(None) => def func1():
# ......
# x = yield 1 到这里会返回,x的值不变 => f1.send('eee')
# =>x = yield 1 这时候不要去管右边,左边的x被赋值('eee')然后继续执行
# 其实只要把yield的左边和右边分开看就行了,他们的触发条件不一样。
# 好了 这篇就到这里了

Python 3.6 生成器之Send方法相关推荐

  1. 生成器之Send方法--python

    转:https://www.cnblogs.com/lanyinhao/p/9137956.html #send主要是用于外部与生成器对象的交互 def func1(): # 生成器函数print(& ...

  2. python生成yaml_使用python脚本自动生成K8S-YAML的方法示例

    1.生成 servie.yaml 1.1.yaml转json service模板yaml apiVersion: v1 kind: Service metadata: name: ${jarName} ...

  3. Python生成器next方法和send方法区别详解

    yield的语法规则是: 在yield这里暂停函数执行,并返回yield后面表达式的值(默认为None),直到被next()再次调用时,从上次暂停的yield代码处继续往下执行.当没有可继续next( ...

  4. Python协程中生成器send方法的使用

    关于博主 努力与运动兼备-~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步! 微信公众号: 啃饼思录 QQ: 2810706745(i思录) 写在前面 博主最近在利用协程写异步爬虫 ...

  5. python两种生成md5的方法

    一. 使用md5包 import md5src = 'this is a md5 test.' m1 = md5.new() m1.update(src) print m1.hexdigest() 二 ...

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

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

  7. Python系列(七):用栗子带你深入了解生成器的send()方法

    一.问题引入 在Python中,可以使用生成器来一次返回单个元素,从而可以避免大量占用内存.下面例子中计算房价函数house_price便是一个生成器的栗子,该函数接收两个参数,其中unit_pric ...

  8. python特性(八):生成器对象的send方法

    生成器对象是一个迭代器.但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法.这些方法,主要是用于外部与生成器对象的交互.本文先介绍send方法. send方法有一个参 ...

  9. python读取文件名存到list_python读取文件名称生成list的方法

    下面为大家分享一篇python读取文件名称生成list的方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 经常需要读取某个文件夹下所有的图像文件. 我使用python写了个简单的代码,读取 ...

最新文章

  1. LinkedList阅读
  2. SQL 中 left join、right join、inner join 的区别
  3. ipv6 服务器虚拟机软件,ipv6虚拟主机是做什么的
  4. Qt DLL总结【二】-创建及调用QT的 DLL
  5. 【Oracle】恢复临时表空间数据文件
  6. Scala学习(一、环境配置和基础)
  7. CIA网攻中国11年,内网防护刻不容缓!
  8. 代码管理学:一时不检查,工作必走样
  9. 不容错过的30页超赞项目管理PPT
  10. 远程计算机桌面图标不见了怎么办,网络连接图标不见了原因有哪些【解决方法】...
  11. 在 Linux 中安装 Firefox
  12. 进程之间的通信(管道详解)
  13. 虚拟化服务器授权,VMware授权变相收费? 虚拟化一大障碍
  14. C语言怎样判断乘法越界,如何判断C语言算术运算的越界问题
  15. java学习-画图小程序
  16. python求素数积_python求质数的3种方法
  17. 基于springboot微信小程序支付功能实现
  18. 使用Android studio转换Jar包时,遇到的一个问题Could not find tools.jar.
  19. 网页版组态软件:Sovit2D Web组态可视化编辑器
  20. android ios耳机转换器,苹果新iPad Pro转向USB-C,那附带的音频线安卓手机能用么

热门文章

  1. PIM-SM协议初探(三)SPT构建
  2. TP-LINK WR802N使用笔记
  3. Office 365 共享邮箱/日历
  4. 数据库系统的三级模式结构与二级映像
  5. 高德地图api之兴趣点搜索
  6. 拓扑排序-信息学奥赛
  7. GTX1080大杀器 AMD官方自曝Vega显卡
  8. 3GPP TS 29244-g30 中英文对照 | 5.2.1 General
  9. java 直播媒体流服务(ffmpeg、javacv)支持本地视频、网路视频
  10. 6-3 在数组中查找指定元素