码迷,mamicode.com
首页 > 其他好文 > 详细

chapter4.6生成器

时间:2018-08-30 00:21:18      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:计算   generator   完成   coroutine   构造   next   线程   没有   tor   

生成器generator

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

生成器函数

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

是一个迭代器,是可迭代对象

惰性求值,延迟计算

生成器对象迭代完不能回头,调用使用next

没有多余的 yield可以执行,迭代完成后再迭代会抛出StopIteration异常

 

yield语句在函数中,函数就是生成器,,调用不会立即执行

执行到yield会暂停,把yield表达式返回

return 可以终止函数运行,但是返回值不会获取到,会与异常一同抛出

next(generation)会从当前位置向后执行到碰到的第一个yield语句,会弹出值,并暂停

 

可以用来构造计数器

def inc ():    
    def counter():
        i = 0
        while True:
            i += 1
            yield i
    c = counter()
#     def inc():
#         return next(c)
#     return inc
    return lambda : next(c)
g=inc()
print(g())
print(g())
print(g())

 

协程coroutine

生成器的高级用法

比线程,进程轻量级

在用户空间进行调度

Python3 asyncio 就是协程实现,已加入标准库

Python3.5 使用async、await关键字直接原生支持协程

协程调度器实现

  有两个生成器A,B

  next(A)后,A执行到yield语句暂停,执行next(B),B执行到yield也暂停,周而复始,实现调度效果

  可以引入yield策略来实现切换

非抢占式调度

yield from 是Python 3 .3出现的新语法

yield from iterable 是for item in iterable:yield item 形式的语法糖

 

chapter4.6生成器

标签:计算   generator   完成   coroutine   构造   next   线程   没有   tor   

原文地址:https://www.cnblogs.com/rprp789/p/9538298.html

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