zoukankan      html  css  js  c++  java
  • Python档案袋(生成器、迭代器、队列 )

    生成器:

    简单的生成器实现:

     1 #生成器,将for循环的变量传递到前面的式子进行处理
     2 #生成的并不是一个列表,而是一个存在算数规则的对象
     3 #不能通过下标直接取值,必须一个一个从头到尾取
     4 va=(i*2 for i in range(10))
     5 print(va)
     6 
     7 #调用下一个,只记住当前位置,相当于有一个游标,只能向下
     8 print(va.__next__()) #输出:0
     9 print(va.__next__()) #输出:2
    10 
    11 #变量生成器
    12 for i in va:
    13     print(i) #输出:#4 6 8 10 12 14 16 18

    生成器进阶:

     1 def funx1(max):
     2     m,x,y=0,0,1
     3     while m<max:
     4         #print(y) #1 1 2 3 5 8 13 21 34 55
     5         yield y #生成器输出,使用for循环或者next方法才会输出
     6         x,y=y,(x+y)
     7         m+=1
     8 
     9 #普通调用
    10 #funx1(10)
    11 
    12 #生成器调用
    13 funx=funx1(10)
    14 print(funx.__next__())
    15 print("----- 可输出 ------")
    16 print("取值方法1:",funx.__next__())
    17 print("取值方法2:",next(funx))

    生成器发送数据:

     1 def funx1():
     2     while True: #如果不写则启动就结束了,不能继续发数据
     3         res=yield
     4         print("获取的结果:",res)
     5 
     6 #生成器调用
     7 funx=funx1()
     8 funx.send(None) #必须先启动生成器,无输出,也可以使用funx.__next__()
     9 funx.send("------") #发送数据,输出:获取的结果: ------
    10 funx.send("******") #输出:获取的结果: ******

    迭代器:

    表示一个数据流,可以无限大

    可使用for循环的对象都是可迭代对象,如字符串、列表、字典等,可使用next(对象)的对象都是迭代器对象

    可迭代对象可以通过iter方法变成迭代器对象

    1 strx="abcdefghigk"
    2 
    3 #转换为迭代器
    4 va=iter(strx)
    5 
    6 print(next(va)) #输出:a
    7 print(next(va)) #输出:b

     队列:

    可自定义先入先出还是后人先出,数据一经取出就在队列里自动去除

     1 import queue
     2 
     3 #先进先出
     4 #qlistx=queue.Queue(maxsize=5) #生成实例,参数maxsize表示最大数量,超过则阻塞,等待头取出
     5 #qlistx=queue.Queue() #生成实例
     6 
     7 #后进先出
     8 qlistx=queue.LifoQueue() #生成实例
     9 
    10 
    11 #设置数据方法一
    12 #队列满则阻塞等待
    13 qlistx.put("1111111")
    14 qlistx.put("2222222")
    15 
    16 #设置数据方法二
    17 #超时则报异常
    18 qlistx.put("333333",timeout=1)
    19 
    20 print(qlistx.qsize()) #输出列表大小
    21 
    22 #取数据方法一
    23 #如果取到最后没有数据,将会一直处于阻塞
    24 print(qlistx.get())
    25 print(qlistx.get())
    26 
    27 #取值方法二
    28 #设置超时时间,超时则报异常
    29 print(qlistx.get(timeout=1))
    30 
    31 
    32 #取数据方法三
    33 #无数据不进行阻塞,如果无数据则报异常
    34 #print(qlistx.get_nowait())

    优先级存取值:

    值越小则优先级越高,实现高优先级最先取出

    import queue
    
    qlistx=queue.PriorityQueue() #生成实例
    
    qlistx.put((1,"1111111"))
    qlistx.put((-1,"2222222"))
    qlistx.put((100,"99999999"))
    
    print(qlistx.get()) #输出:(-1, '2222222')
    print(qlistx.get()) #输出:(1, '1111111')
  • 相关阅读:
    用windows下的画板画蒙娜丽莎
    记账
    谁说VISTA的游戏兼容性差?
    Silverlight3系列(四)数据绑定 Data Binding 1 Virus
    Silverlight3系列(二)Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证 Virus
    Silverlight3系列(七)数据绑定 Data Binding 3 数据类型转换 Data Converter Virus
    Silverlight3系列(六)数据验证 Data Validation Virus
    ocs2007二次开发:扩展tab标签 Virus
    Silverlight3系列(八)数据绑定 Data Binding 3 数据模板 Data Templates Virus
    Silverlight3系列(九)Silverlight 及其相关技术简介 Virus
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10423712.html
Copyright © 2011-2022 走看看