15.高级语法(7)

迭代器

  • 可迭代:直接作用于for循环的变量
  • 迭代器:可作用于for循环,还可以被next调用
  • isinstance判断
  • iterable和iterator可以转换
    • 通过iter函数

生成器

  • generator
  • 包含yield
  • 遇到yield返回,并且记住当前位置,下一次执行从上一次返回的位置
  • next()调用
L = [x*x for x in range(5)]
g = (x*x for x in range(5))

print(type(L))
print(type(g))
<class 'list'>
<class 'generator'>

协程

  • 是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不同位置暂停或开始执行程序,可以理解成一个生成器。
  • 协程实现:
    • yield返回
    • send调用
  • 协程的四个状态
    • inspect.getgeneratorstate(…):函数确定,返回以下字段中的一个
    • GEN_GREATE:等待开始执行
    • GEN_RUNNING:解释器正在执行
    • GEN_SUSPENED:在yield表达式处暂停
    • GEN_CLOSED:执行结束
    • NXET预激(prime)
  • 协程终止
    • 协程终止未处理的异常会向上冒泡至触发者
    • 终止协程的一种方式:发送哨兵值(None、Ellipse等)
  • yield from
    • 调用协程为了得到返回值,协程必须正常终止
    • 生成器正常终止会发出StopInteration异常,异常对象的value值属性保存到返回值
    • yield from从内部捕获StopInteration异常
    • 委派生成器
      • 包含yield from 生成器函数
      • 在yield from表达式的地方暂停,调用者可以直接把数据发给子生成器
      • 子生成器再把产出的值发送给调用者
      • 子生成器最后,解释器会抛出StopInteration异常,并且把返回值附加到异常对象上

asyncio消息循环

  • 创建消息循环
  • 将协程导入
  • 关闭消息循环

async/await

aiohttp

  • asyncio实现单线程的并发io,客户端用处不大
  • 在服务端可以实现asyncio+coruntine,由于http是异步操作
  • asyncio实现了tcp,udp,ssl等协议
  • aiohttp是用asyncio实现的http框架

concurrent

  • futures
  • map函数
发布了247 篇原创文章 · 获赞 23 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LiyangBai/article/details/102999341