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 输出:2
10 
11 变量生成器
12 in va:
13     print(i) 输出:#4 6 8 10 12 14 16 18

生成器进阶:

def funx1(max):
 2     m,x,y=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 
普通调用
10 funx1(10)
11 
生成器调用
13 funx=funx1(10)
14 print(funx.__next__())
15 print("----- 可输出 ------"16 取值方法1:",funx.17 取值方法2:生成器发送数据:

 funx1():
 2     while True: 如果不写则启动就结束了,不能继续发数据
 3         res=yield
获取的结果:,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 输出:b

 队列:

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

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

优先级存取值:

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

 queue

qlistx=queue.PriorityQueue() 
qlistx.put((1,))
qlistx.put((-1,1)">))
qlistx.put((100,1)">99999999))

print(qlistx.get()) 输出:(-1,'2222222')
输出:(1,'1111111')

相关文章

本文从多个角度分析了vi编辑器保存退出命令。我们介绍了保存...
Python中的回车和换行是计算机中文本处理中的两个重要概念,...
SQL Server启动不了错误1067是一种比较常见的故障,主要原因...
信息模块是一种可重复使用的、可编程的、可扩展的、可维护的...
本文从电脑配置、PyCharm版本、Java版本、配置文件以及程序冲...
本文主要从多个角度分析了安装SQL Server 2012时可能出现的错...