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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
python实现拓扑排序的基本教程
Mar 11 Python
Python3爬虫全国地址信息
Jan 05 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
python中web框架的自定义创建
Sep 08 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
实现Python3数组旋转的3种算法实例
Sep 16 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之字符串变相相减的代码
2007/03/19 PHP
mysql总结之explain
2012/02/27 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
Python列表推导式的使用方法
2013/11/21 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python实现的计算器功能示例
2018/04/26 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
服装设计专业自荐书范文
2013/12/30 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
党支部工作总结2015
2015/04/01 职场文书
离婚上诉状范文
2015/05/23 职场文书
何玥事迹观后感
2015/06/16 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
高一语文教学反思
2016/02/16 职场文书
python实现三次密码验证的示例
2021/04/29 Python
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
python开发飞机大战游戏
2021/07/15 Python
SQL注入详解及防范方法
2021/12/06 MySQL
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js