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 相关文章推荐
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
对python创建及引用动态变量名的示例讲解
Nov 10 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
python 统计文件中的字符串数目示例
Dec 24 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Django展示可视化图表的多种方式
Apr 08 Python
python中%格式表达式实例用法
Jun 18 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/01/02 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
Python面向对象之继承和多态用法分析
2019/06/08 Python
python实现大文本文件分割
2019/07/22 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
专营店会计助理岗位职责
2013/11/29 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
Python 如何实现文件自动去重
2021/06/02 Python