zoukankan      html  css  js  c++  java
  • python- 生成器*** 特别重要

    生成器generator

    • 生成器指的是生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,
    • 调用这个函数得到一个生成器对象
    • 生成器函数
      • 函数体中包含yield语句的函数,返回生成器对象
      • 生成器对象,是一个可迭代对象,是一个迭代器
      • 生成器对象,是延迟计算、惰性求值的  

    举例说明:

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

    生成器函数等价于生成器表达式,只不过生辰器函数可以更加的复杂。

     在生成器函数中,使用多个yield语句,执行一次后会暂停执行,把yield表达式的值返回

    再次执行会执行到下一个yield语句

    return语句依然可以终止函数运行,但return语句的返回值不能被获取到

    return会导致无法继续获取下一个值,抛出stopIteration异常

    如果函数没有显示的return语句,如果生成器函数执行到结尾,一样会抛出StopIteration异常。

     生成器对象每次都是相同的,所以执行的时候值会变。

     每次都重新生成了一个生成器对象,所以值都是第一个yield返回的值。

    •  生成器应用
    • 协程 coroutine
    • 生成器的高级用法
    • 比进程、线程轻量级
    • 是在用户空间调度函数的一种实现
    • Python3 asyncio就是协程实现,已经加入到标准库
    • Python3.5 使用asynhc、await 关键字直接原生支持协程
    •   协程调度器实现思路
      • 有2个生成器A、B
      • next(A)后,A执行到了yield语句暂停,然后去执行next(B),B执行到yield语句也暂停,然后再次调用next(A),在调用next(B)在,周而复始,就实现了调度的效果
      • 可以引入调度的策略来实现切换的方式
    •   协程是一种非抢占式调度
    我的目标是每天厉害一点点
  • 相关阅读:
    linux expr命令执行问题
    Virtual Box设置Host only模式的网络互通问题
    Linux下管理软件的方法
    转载 AMI方案和Insyde方案
    笔记二(名词详解)持续更新。。。
    笔记一(固件、BIOS、UEFI)
    Cache As Ram
    (二十四)C语言之文件
    (二十三)C语言之位运算
    (二十二)C语言之typedef
  • 原文地址:https://www.cnblogs.com/sidaofeng/p/10899895.html
Copyright © 2011-2022 走看看