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
  • 相关阅读:
    docker基础概念
    面试题
    python总结【来自Runoob】
    如何实现在分组的情况下,以另一个时间字段查询出结果?
    Java FIle类和IO流
    HTML5 基础知识(1)——基本标签
    数据库个人笔记(3) -- 基础篇
    数据库个人笔记(2) -- 基础篇
    数据库个人笔记(1)-- 基础篇
    python 基础学习笔记(8)--装饰器
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/6557510.html
Copyright © 2011-2022 走看看