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 相关文章推荐
Tensorflow简单验证码识别应用
May 25 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
python实现ftp文件传输功能
Mar 20 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Python列表如何更新值
May 27 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
pytorch--之halfTensor的使用详解
May 24 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 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
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python实现Linux中的du命令
2017/06/12 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
银行职业规划书范文
2013/12/28 职场文书
高中课程设置方案
2014/05/28 职场文书
2014年工人工作总结
2014/11/25 职场文书
纪委立案决定书
2015/06/24 职场文书
Python中的pprint模块
2021/11/27 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python