不可否认,Python的标准库十分强大,包括的功能极其丰富,堪称最为全面的标准库了。但你总会在一些时候需要一些标准库里没有的工具函数,自己写起来也不是不可以,但总重复造轮子也太麻烦了。Boltons,这个包含了超过230个工具的Python工具库,会成为你补充标准库的得力助手。
Python工具库
简介Boltons,是由 mahmoud 在 Github 上开源的Python通用工具库,项目仓库位于 https://github.com/mahmoud/boltons,目前版本为 20.0.0。Boltons 包含超过230个Python常用工具,包括:原子操作的文件保存、优先队列、Traceback、时区、LRU和LRI缓存、递归数据结构等,且没有额外依赖,功能强大,使用方便。
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工具库,提供了大量标准库中没有的常用工具,功能强大,避免了重复造轮子,方便在开发中的随时调用。
Boltons中的实现的工具囊括了方方面面,许多工具函数都设计得十分巧妙,值得Python开发者进行学习。同时,感兴趣的开发者也可以进行开源贡献,提供自己平时积累下的工具函数,丰富工具集合。
,