zoukankan      html  css  js  c++  java
  • 迭代器 生成器

    迭代器协议:

    1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

    2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

    3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

    生成器

    • 语法上和函数类似:生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值
    • 自动实现迭代器协议:对于生成器,Python会自动实现迭代器协议,以便应用到迭代背景中(如for循环,sum函数)。由于生成器自动实现了迭代器协议,所以,我们可以调用它的next方法,并且,在没有值可以返回的时候,生成器自动产生StopIteration异常
    • 状态挂起:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行

    工作理论:

    用__iter__转成可迭代对象

    在用__next__便利

    yield  和 return 一样但会保留状态

    send()执行下一次的 yield ,可穿参数给 yield

    三元表达式:

    name='alex'
    name='linhaifeng'
    res='SB' if name == 'alex' else 'shuai'
    print(res)

    吃包子

     1 import time
     2 def wen():
     3     while True:
     4         print("准备吃包子")
     5         baozi=yield 1
     6         print("正在吃包子%s"%baozi)
     7         time.sleep(2)
     8 def shi():
     9     c1=wen()
    10     c2=wen()
    11     c1.__next__()
    12     c2.__next__()
    13     for i in range(10):
    14         time.sleep(2)
    15         c1.send(i)
    16         c2.send(i)
    17 shi()
  • 相关阅读:
    tbody的有趣问题
    如何去掉a标签的虚框
    在ubuntu下安装ruby on rails环境
    odoo 新建模块命令
    安装sentry的几个命令,日志监控系统
    腾讯云docker加速
    odoo技术笔记
    零基础实现摄像头的全平台直播 (一)内网直播的实现
    EasyNVR、EasyDSS二次开发RTMP、HLS流在web页面进行无插件播放(demo)
    EasyDSS流媒体服务器和EasyDSS云平台异同
  • 原文地址:https://www.cnblogs.com/shizhengwen/p/6145317.html
Copyright © 2011-2022 走看看