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


Posted in Python onMay 30, 2020

yield的语法规则是:

在yield这里暂停函数执行,并返回yield后面表达式的值(默认为None),直到被next()再次调用时,从上次暂停的yield代码处继续往下执行。当没有可继续next()时,抛出异常,该异常可被for循环处理。

def fib(n):

def fib(n):
  a, b = 0, 1
  i = 0
  while i < n:
    yield b
    a, b = b, a+b
    i += 1

if __name__ == '__main__':
  f = fib(10)
  for item in f:
    print(item)

python中,含有yield关键字的对象就是一个生成器,每次调用next方法时会执行到yield后面的语句,然后返回yield后面代码块的执行结果

def foo():
  bar_a = yield 1     # bar_a是语句块(yield 1)的返回值,默认为None
  bar_b = yield bar_a
  yield "最后一个值,再迭代就要报StopIteration了"

f = foo()          # 创建生成器,此时没有执行foo()里的任何语句
print(next(f))       # 从foo()里进入,一直执行到(yield 1)处,此时变量bar_a还没有创建
print(next(f))       # 先将语句块(yield 1)的返回值赋值个bar_a,此时bar_a的值是None。
              # 然后执行到语句块(yield bar_a),bar_b也还没有被创建
print(next(f)

>>>1
>>>None
>>>最后一个值,再迭代就要报StopIteration了

send()

def foo():
  bar_a = yield 1
  bar_b = yield bar_a
  yield "最后一个值,再迭代就要报StopIteration了"

f = foo()
print(f.send(None))    # 和next(f)的效果一模一样
print(f.send("my lover")) # 覆盖yield 1语句的返回值
print(next(f))

>>>1
>>>my lover
>>>最后一个值,再迭代就要报StopIteration了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python简单生成8位随机密码的方法
May 24 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
【python】matplotlib动态显示详解
Apr 11 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
套娃式文件夹如何通过Python批量处理
Aug 23 Python
详解python tkinter 图片插入问题
Sep 03 Python
python如何实现DES加密
Sep 21 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
python 三种方法提取pdf中的图片
Feb 07 Python
python开发飞机大战游戏
Jul 15 Python
Python新手学习标准库模块命名
May 29 #Python
Django Path转换器自定义及正则代码实例
May 29 #Python
Python新手如何理解循环加载模块
May 29 #Python
Python新手如何进行闭包时绑定变量操作
May 29 #Python
如何理解python中数字列表
May 29 #Python
Django实现前台上传并显示图片功能
May 29 #Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 #Python
You might like
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
WAF的正确bypass
2017/01/05 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
python读取二进制mnist实例详解
2017/05/31 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
代码中finally中的代码会不会执行
2012/02/06 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
元旦晚会活动总结
2014/07/09 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
初中信息技术教学计划
2015/01/22 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
出国导师推荐信
2015/03/25 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
创业计划书之熟食店
2019/10/16 职场文书