📅  最后修改于: 2023-12-03 14:46:37.284000             🧑  作者: Mango
Toolz 是Python的一个函数式编程工具包。它包含了很多函数和数据结构,用于无状态变换(stateless transformations),如映射、过滤器等,以及像reduce和groupby这样的退化操作。
Toolz的设计是为了帮助你写出简洁、优雅和高效的代码,减少你需要编写的代码量,并且能够处理大数据集。
这里介绍几个常用的功能,更多细节请查看官方文档:http://toolz.readthedocs.io/
使用pip安装的方式,可以轻松安装Toolz。
pip install toolz
Toolz中的函数都是以惰性计算(lazy evaluation)方式调用的。即只有在需要计算结果时才会真正执行计算。
>>> from toolz import *
>>> inc = lambda x: x + 1
>>> doubles = (2*x for x in range(5))
>>> inc_doubles = map(inc, doubles) # 惰性计算
>>> list(inc_doubles) # 真正计算
[1, 3, 5, 7, 9]
Toolz和Python内置的map和filter几乎一样。只不过Toolz的版本支持惰性计算,更适合处理大型数据集。
>>> from toolz import *
>>> is_even = lambda x: x % 2 == 0
>>> double = lambda x: x * 2
>>> nums = [1, 2, 3, 4, 5]
>>> list(map(double, filter(is_even, nums)))
[4, 8]
>>> list(map(double, filter(is_even, (2*x for x in range(5)))))
[4, 8]
>>> list(map(double, filter(is_even, iterate(lambda x: x+1, 0)))).count(4)
1
Toolz提供了像reduce、groupby这样的退化操作。
>>> from toolz import *
>>> add = lambda x, y: x + y
>>> nums = [1, 2, 3, 4, 5]
>>> reduce(add, nums)
15
>>> groupby(str, nums)
{'1': [1], '2': [2], '3': [3], '4': [4], '5': [5]}
Toolz实现了很多便于使用的数据结构。
>>> from toolz.dicttoolz import *
>>> d1 = {'a':1, 'b':2}
>>> d2 = {'a':10, 'c':3}
>>> merge(d1, d2)
{'a': 10, 'b': 2, 'c': 3}
>>> get_in(['a', 'b'], d1)
1
>>> from toolz.itertoolz import *
>>> nums = [1, 2, 3]
>>> list(partition(2, nums))
[(1, 2), (3,)]
>>> list(consume(map(str, nums))) # 迭代完之后返回None
>>> last(nums)
3
>>> list(drop(2, nums))
[3]
>>> list(dropwhile(lambda x: x < 3, nums))
[3]
Toolz是Python的一个函数式编程工具包。它可以帮助你写出简洁、优雅和高效的代码,减少你需要编写的代码量,并且能够处理大数据集。Toolz的设计是为了帮助你处理函数式编程问题。