资讯专栏INFORMATION COLUMN

4-array/heapq/queue模块

forrest23 / 1391人阅读

摘要:定义了一个非常类似的模块,其函数接受两个参数,第一个参数是预先定义好的类型,第二个参数,一般为一个序列。很少见到代码输出是中实现堆排序的模块。这里主要看一下优先级队列定义优先级比较输出

array

array 定义了一个非常类似list的模块,其array 函数接受两个参数,第一个参数是预先定义好的类型,第二个参数,一般为一个序列。 很少见到
代码:

import array

a = array.array("b",b"abcd")
print(a)
print(a[0])

输出:

array("b", [97, 98, 99, 100])
97
heapq

heapq 是python中实现堆排序的模块。

from heapq import *
import random
# 创建一个堆排序
data = []
for i in range(10):
    heappush(data,random.randint(1,20))

print(data)

# 使用 heappop 移除最小的元素
small_num = heappop(data)
print(small_num)
print("pop移除最小元素后: ",data)
# 使用heapreplace替换最小元素,会先执行pop,然后replace
n = heapreplace(data,100)
print(n)
print("执行replace后:",data)

# n个最大 / n个最小
lagest = nlargest(3,data)
small = nsmallest(3,data)

print("3个最大的值:",lagest)
print("3个最小的值:",small)

输出

[2, 3, 8, 7, 4, 18, 12, 17, 16, 13]
2
pop移除最小元素后:  [3, 4, 8, 7, 13, 18, 12, 17, 16]
3
执行replace后: [4, 7, 8, 16, 13, 18, 12, 17, 100]
3个最大的值: [100, 18, 17]
3个最小的值: [4, 7, 8]
queue

队列,在线程一节有总结过,有先进先出队列,也有优先级队列,队列结合线程,可以保证线程之间通信的安全。这里主要看一下优先级队列

from queue import PriorityQueue
import threading
import functools
Q = PriorityQueue()

@functools.total_ordering
class Job:
    def __init__(self,priority,desc):
        self.priority = priority
        self.desc = desc
        return 
    # 定义优先级比较
    def __eq__(self,other):
        try:
            self.priority == other.priority
        except AttributeError as e:
            return NotImplemented
    
    def __lt__(self,other):
        try:
            self.priority < other.priority
        except AssertionError:
            return NotImplemented

def worker():
    while not Q.empty():
        item = Q.get()
        import time 
        time.sleep(1)
        print(item.desc)
    
    Q.all_tasks_done


if __name__ == "__main__":
    Q.put(Job(3,"mid job"))
    Q.put(Job(10,"important job"))
    Q.put(Job(1,"low job"))
    ts = [threading.Thread(target=worker),threading.Thread(target=worker)]
    for t in ts:
        t.start()
    
    t.join()

输出

important job
mid job
low job 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42993.html

相关文章

  • 前端模块化开发

    摘要:来源于阿贤博客模块化今天给大家写一篇关于前端模块化开发知识点。前端模块化开发那点历史模块化是指在解决某个复杂混杂问题时,依照一种分类的思维把问题进行系统性的分解以之处理。 来源于:阿贤博客 javascript模块化 今天给大家写一篇关于前端模块化开发知识点。 前端模块化开发那点历史 模块化: 是指在解决某个复杂、混杂问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块...

    tianhang 评论0 收藏0
  • 【Amaple教程】2. 模块

    摘要:模块更新时部分不需被替换的模块,检测到或参数变化增加移除或修改参数时触发,如所有页面的部分总是不变,此时它将不会被替换。模块函数将在模板指令与状态数据中讲解继续学习下一节教程模板指令与状态数据也可回顾上一节教程启动路由 正如它的名字,模块用于amaplejs单页应用的页面分割,所有的跳转更新和代码编写都是以模块为单位的。 定义一个模块 一个模块由标签对包含,内部分为template模板...

    weizx 评论0 收藏0
  • 【Amaple教程】2. 模块

    摘要:模块更新时部分不需被替换的模块,检测到或参数变化增加移除或修改参数时触发,如所有页面的部分总是不变,此时它将不会被替换。模块函数将在模板指令与状态数据中讲解继续学习下一节教程模板指令与状态数据也可回顾上一节教程启动路由 正如它的名字,模块用于amaplejs单页应用的页面分割,所有的跳转更新和代码编写都是以模块为单位的。 定义一个模块 一个模块由标签对包含,内部分为template模板...

    付伦 评论0 收藏0
  • 【Amaple教程】2. 模块

    摘要:模块更新时部分不需被替换的模块,检测到或参数变化增加移除或修改参数时触发,如所有页面的部分总是不变,此时它将不会被替换。模块函数将在模板指令与状态数据中讲解继续学习下一节教程模板指令与状态数据也可回顾上一节教程启动路由 正如它的名字,模块用于amaplejs单页应用的页面分割,所有的跳转更新和代码编写都是以模块为单位的。 定义一个模块 一个模块由标签对包含,内部分为template模板...

    OBKoro1 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<