码迷,mamicode.com
首页 > 编程语言 > 详细

第十三天python3 生成器yield

时间:2020-07-16 10:16:07      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:from   形式   异常   关键字   用户   递归   延迟   lazy   http   

生成器generator

  生成器指的是生成器对象,可由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象;

生成器函数

  函数体中包含yield语句的函数,返回生成器对象;

  生成器对象,是一个可迭代对象,是一个迭代器;

  生成器对象,是延迟计算,惰性求值的;

yield生成器示例:

技术图片

 生成器表达式示例:

技术图片

  普通的函数调用fn(),函数会立即执行完毕,但是生成器函数可以使用next函数多次执行;

  生成器函数等价于生成器表达式,只不过生成器函数更复杂;

生成器举例:

技术图片

    如上图所示:在生成器中,使用多个yield语句,执行一次后会暂停执行,把yield表达式的值返回,再次执行会执行到下一个yield语句;return语句依然可以终止函数运行,但是return语句的返回值不能被获取到;return会导致无法继续获取下一个值,抛出StopIteration异常;如果函数没有显示return语句,如果生成器函数执行到结尾,一样会抛出StopIteration异常;

生成器应用

  协程coroutine

  生成器的高级用法,比进程、线程轻量级,是在用户空间调度函数的一种实现,pyton3 asyncio就是协程实现,已经加入到标准库;python3.5使用async、await关键字直接原生支持携程;

协程调度器实现思路:

  1、有两个生成器A、B

  2、next(A)后,A执行到了yield语句暂停,然后去执行next(B),B执行到yield语句也暂停,然后再次调用next(A),再调用next(B);周而复始,就实现了调度的效果;

  3、可以引入调度的策略来实现切换的方式;

  协程是一种非抢占式调度;

处理递归问题:

技术图片

 yield from

技术图片

  yield from是python 3.3出现的新语法,yield from iterable 是for item in iterable:yield item形式的语法糖;

  从可迭代对象中一个个拿元素;

第十三天python3 生成器yield

标签:from   形式   异常   关键字   用户   递归   延迟   lazy   http   

原文地址:https://www.cnblogs.com/zhangzhide/p/13237475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!