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实现图像几何变换
Jul 06 Python
python用户管理系统的实例讲解
Dec 23 Python
python批量替换页眉页脚实例代码
Jan 22 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
python实现车牌识别的示例代码
Aug 05 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
Python如何读写二进制数组数据
Aug 01 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
详解PyTorch模型保存与加载
Apr 28 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
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
prototype class详解
2006/09/07 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
诚信承诺书范文
2014/03/27 职场文书
气象学专业个人求职信
2014/04/22 职场文书
学习保证书怎么写
2015/02/26 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
Docker部署Mysql8的实现步骤
2022/07/07 Servers
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS