zoukankan      html  css  js  c++  java
  • chapter4.6生成器

    生成器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 形式的语法糖

  • 相关阅读:
    python 读execl文件
    git 命令 个人备忘录
    python-django后端,富文本编辑器防XSS漏洞攻击,过滤富文本XSS
    mi
    Glance docker安装 cinder
    keystore glance
    openstack管理docker管理
    lvm 磁盘 数据库 wordpress 参考答案
    docker
    wordpress
  • 原文地址:https://www.cnblogs.com/rprp789/p/9538298.html
Copyright © 2011-2022 走看看