队列

来源:互联网 发布:Windows 10 无线网络 编辑:程序博客网 时间:2024/06/06 00:43

先进先出,会进会出,进了不出就存储,出了则不再队列范围内

import queueq = queue.Queue()

基本方法如下

1. 设置队列长度

q = queue.Queue(maxsize=length)

2. 压入数据

q.put()


3. 获取数据

q.get()


4. 判断队列是否为空

q.empty()

5. 判断队列是否满了

q.full()

6. 合并队列

q.join(otherQueue)


7. 查看队列长度

q.qsize()


前面的是普通的队列,一般数据都是按照先进先出的顺序进行的

但是还有一种栈队列,它实现的是后进先出

import queueq = queue.LifoQueue()

一般方法和一般队列一样,但是顺序按照后进先出的顺序进行


还有一种队列是优先级队列,可以自定义比较方式,然后按照优先级进行返回

import queueq = queue.PriorityQueue(maxsize=3)q.put('c')q.put('b')print(q.get()) #b

默认用ascii码进行比较,不论压入顺序,值通过比较优先级进行返回

不过也可以编写一个比较类,自定义优先级

import queueclass Comp(object):    def __init__(self,prop,value):        self.prop = prop        self.value = value    def __lt__(self, other):        return self.prop - other.prop    def __str__(self):        return 'prop:{}\tvalue:{}'.format(self.prop,self.value)    a = queue.PriorityQueue(maxsize=3)a.put(Comp(1,'a'))a.put(Comp(2,'c'))a.put(Comp(3,'b'))while not a.empty():    print(a.get())

结果

prop:3value:bprop:2value:cprop:1value:a

可以看到,队列顺序完全按照优先级进行排序,先输出优先级高的对象

python3中没有cmp函数,类中替代的方法为

__lt__(a, b) # a < b__le__(a,b)  # a <= b__eq__(a,b)  # a == b__ne__(a,b)  # a != b__gt__(a,b)  # a > b__ge__(a, b) # a>= b


排序:队列并不是取出的时候进行的查找,在进行压入的时候就进行了排序

技巧:队列并不算是一种存储手段,它更像是一种调度手段,用来安排事件发生执行顺序

所以通常用来调度方法执行,和线程作用





原创粉丝点击