开发语言
文章平均质量分 78
祁华平
这个作者很懒,什么都没留下…
展开
-
Python:使用 heapq 制作优先级队列
优先级队列是一种特殊的队列,其中每个元素都有一个优先级。队列中的元素按照优先级顺序排列,每次从队列中取出的都是具有最高优先级的元素。优先级队列广泛应用于各种场景,如任务调度、事件驱动模拟、图算法(如 Dijkstra 算法)等。heapq 是 Python 标准库中的一个模块,提供了实现最小堆(min heap)所需的各种函数。最小堆是一种特殊的完全二叉树,其中每个节点的值都不大于其子节点的值。最小堆非常适合用来实现优先级队列,因为堆顶元素始终是最小的元素,即具有最高优先级的元素。原创 2024-09-08 15:53:45 · 909 阅读 · 0 评论 -
使用Python的deque实现生产者-消费者队列
collections.deque是Python内置的一个双端队列,它支持两端高效地添加或删除元素。相比于列表(list),deque在两端的操作性能更优,特别是在需要频繁插入或删除元素的应用场景下表现尤为突出。虽然deque本身不是专门为生产者-消费者模式设计的,但通过适当的封装和扩展,它可以成为一个非常有效的工具。通过本文,我们了解了如何利用Python标准库中的collections.deque来构建一个简单但功能强大的生产者-消费者队列。原创 2024-09-08 15:09:16 · 389 阅读 · 0 评论 -
使用 pickle 序列化和反序列化:用copyreg解决对象变动后的兼容性问题
pickle 模块提供了多种序列化和反序列化的函数,其中最常用的有 pickle.dump 和 pickle.load。# 序列化对象到文件# 从文件中反序列化对象通过本文的学习,我们了解到 pickle 模块在序列化和反序列化方面的强大功能,同时也认识到当对象定义发生变化时,原有的序列化文件可能会变得不再兼容。为了解决这一问题,我们介绍了 copyreg 模块的使用方法,通过注册自定义的序列化和反序列化方法,可以有效地解决对象变动后的兼容性问题。原创 2024-09-08 14:55:54 · 723 阅读 · 0 评论 -
用 concurrent.futures 实现真正的并行计算
通过本文的学习,我们了解了 GIL 对 Python 多线程程序的影响,并学习了如何使用 concurrent.futures 模块中的 ProcessPoolExecutor 来实现真正的并行计算。通过对比不同方法的性能,我们可以看到多进程方法在 CPU 密集型任务中具有明显优势。此外,我们还展示了如何结合 asyncio 和 concurrent.futures 实现异步并行计算。希望这些内容能够帮助读者更好地理解和应用并行计算技术,提升程序的性能和效率。原创 2024-09-08 12:19:03 · 1159 阅读 · 0 评论 -
使用协程实现高并发的I/O处理
协程是一种用户空间的轻量级线程,可以在单个线程内实现并发执行。与传统的多线程相比,协程的上下文切换开销更低,可以实现更高密度的并发任务。协程作为一种轻量级的并发机制,在处理 I/O 密集型任务时具有显著的优势。通过合理的使用协程,可以显著提高程序的并发性和响应速度。本文介绍了协程的基本概念、特点以及在实际应用中的具体实现方法。希望这些内容能够帮助读者更好地理解和应用协程,提升程序的性能。原创 2024-09-08 12:02:33 · 1193 阅读 · 0 评论 -
Python Tips:字典操作时使用 get 处理键不存在的情况
在处理字典中不存在的键时,推荐使用get方法而不是in或捕获KeyError。get避免KeyError:无需捕获异常。简洁的语法:代码更简洁、易读。更高的性能:减少不必要的条件判断和异常处理开销。通过本文的讨论,我们了解到get方法在处理字典中不存在的键时的优势,并展示了多个实际应用场景。希望这些内容能够帮助你在实际开发中更好地利用get方法,提高代码的效率和可读性。原创 2024-09-08 11:17:21 · 334 阅读 · 0 评论 -
Python: 使用 defaultdict 处理内部状态缺失的元素
是的,你可以传递任何可调用的对象作为工厂函数,包括自定义函数。通过以上讨论,我们全面了解了的优势及其在实际应用中的使用方法。希望这篇文章能够帮助你更好地理解和使用。原创 2024-09-08 11:03:55 · 763 阅读 · 0 评论 -
使用 functools.wraps 定义函数修饰器
functools.wraps 是一个非常有用的工具,可以确保函数修饰器正确地保留被修饰函数的元数据。通过使用 functools.wraps,我们可以避免因元数据丢失而导致的各种问题,使代码更加健壮和易读。以上几个例子展示了如何使用 functools.wraps 来定义常见的函数修饰器,包括日志记录、性能监控和输入验证。希望这些示例能够帮助你在实际开发中更好地利用函数修饰器。原创 2024-09-08 10:48:44 · 454 阅读 · 0 评论 -
通过 @classmethod 多态构造同一体系中的各类对象
在 Python 中,@classmethod 装饰器可以用于定义类方法,这些方法通常用于创建类的实例。通过 @classmethod,我们可以实现多态构造,即在不同的类中定义相同名称的类方法,从而实现统一的构造逻辑。示例说明假设我们有一个动物类体系,包括 Animal 基类以及其派生类 Dog 和 Cat。我们将定义一个 create_animal 类方法,用于创建不同类型的动物对象。原创 2024-09-08 10:38:20 · 449 阅读 · 0 评论 -
python中的元类(metaclass)
在 Python 中,元类(metaclass)是用来创建类的 “东西”。原创 2024-09-08 10:23:20 · 868 阅读 · 0 评论 -
Python中的魔法方法(magic methods 或 special methods)-1
Python 有多种类型的运算符,这些运算符是特殊符号、符号组合或指定某种计算类型的关键字。在内部,Python 支持具有特殊方法的运算符。例如,如前所述,.__add__()特殊方法支持加号运算符 (+)。在实践中,您将利用运算符后面的这些方法来实现所谓的运算符重载。注意:要更深入地了解运算符重载,请查看自定义 Python 类中的运算符和函数重载。运算符重载是指为运算符提供额外的功能。您可以使用大多数内置类型及其特定的受支持运算符来执行此操作。原创 2024-09-03 23:04:59 · 932 阅读 · 0 评论 -
Python中的魔法方法(magic methods 或 special methods)-4
Python 的序列和映射是基本的内置数据类型。列表、元组和字符串是序列的示例,而字典是映射类型的示例。您可以通过实现所需的特殊方法来创建自己的类 sequence-like 和 mapping类。为此,Python 定义了序列和映射协议。这些协议是特殊方法的集合。方法描述当您使用索引访问项目时调用,如 sequence[index].__len__()在调用内置 len() 函数以获取基础序列中的项数时调用当您在成员资格测试中使用带有 in 或 not in 运算符的序列时调用。原创 2024-09-07 17:52:19 · 1130 阅读 · 0 评论 -
Python中的魔法方法(magic methods 或 special methods)-2
python魔法方法中的查看对象以及属性控制的一些方法介绍原创 2024-09-04 07:17:17 · 945 阅读 · 0 评论 -
Python中的魔法方法(magic methods 或 special methods)-3
在 Python 中,迭代器和可迭代对象是两种不同但相关的工具,当您需要迭代数据流或容器时,它们可以派上用场。在此方法中,您有一个条件,用于检查当前序列索引是否未达到 ._stop 值,在这种情况下,您可以递增当前索引以控制迭代过程。在以下部分中,您将学习如何使用特殊方法将自定义类转换为迭代器和可迭代对象的基础知识。在此方法中,您将检查提供的值是否为正数,在这种情况下,您将引发 ValueError 异常。否则,您将再次使用 .在这种情况下,您可以使用描述符来管理验证逻辑,其中包括检查提供的值是否为正数。原创 2024-09-07 17:38:53 · 715 阅读 · 0 评论 -
Python:上下文管理之 __enter__, __exit__
python上下文管理with语句的实现使用原创 2023-08-27 11:24:34 · 418 阅读 · 0 评论 -
Python:使用线程池轻松处理多线程
通过使用线程池,您可以并发地处理队列中的多个任务,提高程序的执行效率。方法会自动将任务分配给线程池中的线程进行并发执行,并返回结果的迭代器。,该函数接受一个任务作为参数,并打印出任务的信息。方法,可以更简洁地处理队列中的多个任务,并且可以方便地获取任务的执行结果。方法来处理队列中的多个任务,您可以将任务函数和任务队列作为参数传递给。方法会按照任务在任务队列中的顺序返回结果,即使任务的执行顺序可能不同。,该函数接受一个任务作为参数,并打印出任务的信息。在上面的示例中,我们定义了一个模拟的任务函数。原创 2023-08-27 11:07:49 · 7481 阅读 · 0 评论 -
Python:在调用成员或属性之前运行方法
在Python中,设置属性的高级实现方法,@proper和内置函数__getattribute__原创 2023-08-27 09:19:24 · 226 阅读 · 0 评论 -
用python实现一个超大日志文件多搜索pattern搜索的需求
有个非常大的日志文件,比如说10G文本文件,可能其中有非utf-8的,搜索的pattern是分类存放的,比如分类1,搜索pattern,分类2:搜索pattern。如果更进一步的需求,要求合并相似的找到的文本,如何剔除打印中的如trace的行号,log的日期后再做如下处理,那一步需要根据实际情况来。搜索结果中需按分类存放,结果中需要把匹配行以及行号。定义,这里就不给出来。原创 2023-05-14 07:21:31 · 296 阅读 · 1 评论 -
手机测试常用shell脚本(高级版)
Q:我想实时的后台查询logcat,并且查询到了调用一个函数(callback) 在函数中调用响应操作,比如查询有界面弹出,可以消除弹出框,这个有很多用途,比如log查询到一个错误,可以将log开关打开抓到更多的log。Q:如果我测试完某个操作,想查询logcat中包含不同的关键字,比如A and B and C且这3个不在同一行。Q:我想提前结束脚本使用ctrl+C,但是我又想比如收集log,清理等工作在shell如何实现。Q:等待机器连接,如果连接不上超时返回。原创 2023-05-14 07:02:25 · 1552 阅读 · 0 评论 -
Python中的一些高级函数和话题-1
python高级话题原创 2022-10-16 13:42:55 · 468 阅读 · 1 评论 -
python动态加载技术
提到python动态加载技术,我们需要聊上几个话题:1)反射技术2)模块动态加载importlib3) callback(函数名传递)--不完全算是吧动态。原创 2022-10-16 10:53:37 · 2226 阅读 · 0 评论