不可否认,Python的标准库十分强大,包括的功能极其丰富,堪称最为全面的标准库了。但你总会在一些时候需要一些标准库里没有的工具函数,自己写起来也不是不可以,但总重复造轮子也太麻烦了。Boltons,这个包含了超过230个工具的Python工具库,会成为你补充标准库的得力助手。

python常规教程(Boltons-Python标准库里缺少的都在这里)(1)

Python工具库

简介

Boltons,是由 mahmoud 在 Github 上开源的Python通用工具库,项目仓库位于 https://github.com/mahmoud/boltons,目前版本为 20.0.0。Boltons 包含超过230个Python常用工具,包括:原子操作的文件保存、优先队列、Traceback、时区、LRU和LRI缓存、递归数据结构等,且没有额外依赖,功能强大,使用方便。

python常规教程(Boltons-Python标准库里缺少的都在这里)(2)

Python工具库:Boltons

安装

Boltons 没有额外依赖,直接使用 pip 安装:

pip install boltons

示例

Boltons工具众多,限于篇幅,我们只介绍其中几个。其中,Boltons 包括了缓存相关的工具,对应的子模块为 cacheutils。cacheutils 提供了两个数据结构:LRI(最近最少插入)和 LRU(最近最少使用)缓存,以及一组可插拔的缓存装饰器。

>>> from boltons.cacheutils import LRU >>> cap_cache = LRU(max_size=2) >>> cap_cache['a'], cap_cache['b'] = 'A', 'B' >>> from pprint import pprint as pp >>> pp(dict(cap_cache)) {'a': 'A', 'b': 'B'} >>> [cap_cache['b'] for i in range(3)][0] 'B' >>> cap_cache['c'] = 'C' >>> print(cap_cache.get('a')) None

Boltons 的模块 iterutils 则提供了与循环迭代相关的工具函数,如 chunked 提供了按长度分块的循环,pairwise 提供了相邻成组的循环,而 windowed 则提供了滑动窗口形式的迭代:

>>> chunked(range(10), 3) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] >>> chunked(range(10), 3, fill=None) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, None, None]] >>> chunked(range(10), 3, count=2) [[0, 1, 2], [3, 4, 5]] >>> pairwise(range(5)) [(0, 1), (1, 2), (2, 3), (3, 4)] >>> pairwise([]) [] >>> windowed(range(7), 3)) [(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

queueutils 提供了一个功能更强大,性能更高的优先队列的实现:

>>> pq = PriorityQueue() >>> pq.add('low priority task', 0) >>> pq.add('high priority task', 2) >>> pq.add('medium priority task 1', 1) >>> pq.add('medium priority task 2', 1) >>> len(pq) 4 >>> pq.pop() 'high priority task' >>> pq.peek() 'medium priority task 1' >>> len(pq) 3

gcutils 则提供了关于垃圾回收的相关工具,使得可以对于程序的GC情况有更好的控制:

>>> class Ratking(object): pass >>> wiki, hak, sport = Ratking(), Ratking(), Ratking() >>> from boltons.gcutils import get_all >>> len(get_all(Ratking)) 3

而 Boltons 的 strutils 则提供了更为丰富的字符串相关的工具函数,包括:驼峰命名与下划线命名的转换,文本的slugify转换,英语单词的单数和复数转换等:

>>> camel2under('BasicParseTest') 'basic_parse_test' >>> under2camel('complex_tok

python常规教程(Boltons-Python标准库里缺少的都在这里)(3)

Python工具库

总结

Boltons作为一个Python工具库,提供了大量标准库中没有的常用工具,功能强大,避免了重复造轮子,方便在开发中的随时调用。

Boltons中的实现的工具囊括了方方面面,许多工具函数都设计得十分巧妙,值得Python开发者进行学习。同时,感兴趣的开发者也可以进行开源贡献,提供自己平时积累下的工具函数,丰富工具集合。

,