zoukankan      html  css  js  c++  java
  • 迭代器&生成器&yield异步

    迭代器

    #迭代器是访问集合元素的一种形式,迭代器从集合的第一个元素开始访问,直到所有的元素被访问
    # 结束才结束,迭代器只能往前访问,不能往后访问,比如你先访问1,在访问2,在访问3.如果已经
    # 访问到3了,你就不能访问2了;迭代器仅仅在迭代到某个元素才计算该元素的值,而在访问之前
    # 或者之后,该元素可以不存在或者被销毁,这个特点使得他适合于遍历一些巨大的或者无限的集合
    #迭代器仅仅有一个方法next


    name = iter(['a','b','c'])
    print(type(name))

    # <class 'list_iterator'>
    #迭代器是不能这样的访问的
    # print(name[1])

    #迭代器只能这样访问

    print(name.__next__())
    # a
    print(name.__next__())
    # b
    ret = name.__next__()
    print(ret)
    # c


    #迭代器只能往后取,不能往前取,而且一次只能取一个值
    #只能从头到尾依次访问
    #便于循环比较大的数据集合,节省内存


    生成器
    #生成器:如果调用一个函数,返回的是是一个迭代器,那么这个函数就叫做生成器
    # 如果函数中包含yield语法,那这个函数就会变为生成器,返回一个迭代器


    def cash_money(amount):
    while amount >= 0:
    amount -= 100
    yield 100 #这里的yield就是返回一个值,和以前的return是一样的
    print('我又来取钱了!')


    #cash_money这个函数就是一个生成器generator,返回的值就叫做迭代器
    atm = cash_money(400)
    print(type(atm))
    print(atm.__next__())
    print(atm.__next__())

    print('交个大保健。。。。。')
    print(atm.__next__())


    #生成器的作用就是实现异步


    yield
    import time
    def eator(name):
    print("[%s] 我要来吃包子了。。。" %(name))
    while True:
    baozi = yield
    print("包子[%s]来了,[%s]要吃包子了" %(baozi,name))
    def producer(ddddddd):
    c1 = eator('A')
    c2 = eator('B')
    c1.__next__()
    c2.__next__()
    print('老子要来做包子了。。。。')
    for i in range(5):
    time.sleep(2)
    print('做了两个包子。。。')
    c1.send(i)
    c2.send(i)
    producer('Bob')d
  • 相关阅读:
    海量图片曝光百度新家“搜索框”大厦
    您玩儿转手机通讯录了吗?
    这是给开发者的弥天大谎还是至理名言?
    互联网创业,不要让经验挡住你前进的道路
    永远不要去请示是否应该整理一下你的代码
    LinkedIn开放软件平台 开发者可集成其技术
    马云建新"淘宝" 借传统媒体补课线下消费群
    乔布斯的五大魔法
    全能 Google 服务提醒软件,GoogSysTray
    Twitter用户偏好新闻 Facebook用户更喜欢科技
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/6557510.html
Copyright © 2011-2022 走看看