该模块设计的目的是包含一些面向函数式编程的接口,具有两个功能:
对函数执行前进行修饰,将函数作为返回值。任何可调用对象都符合该模块的设计理念。
1. cache(user_function)
对函数进行缓存,常用于 DFS 的空间换时间 trick
python
@cache
def factorial(n):
return n * factorial(n-1) if n else 1
2. cmp_to_key(func)
提供一个定义复杂排序条件的函数接口。python 3 的 sort 函数只支持从单个元素角度定义排序条件,该函数可以从两个元素角度定义排序条件。
返回值为严格的 +1, -1
python
def cmp_function(x, y):
return 1 if x + y > y + x else -1
sorted(iterable, key=cmp_to_key(cmp_function))
3. partial(func, /, *args, **keywords)
将原函数的一些参数固定为值,返回新函数。
在新函数被调用时,如果传入的参数与原函数中被固定的参数值冲突,会进行覆写。
python
def partial(func, /, *args, **keywords):
def new_func(*fargs, **fkeywords):
newkeywords = {**keywords, **fkeywords}
return func(*args, *fargs, **newkeywords)
new_func.func = func
new_func.args = args
new_func.keywords = keywords
return newfunc
4. reduce(function, iterable[, initializer])
- 将一个可迭代对象的元素从左向右,依次输入到函数对象中。
- 如果初始化元素为空(默认),则把前两个元素先输入到函数对象进行结果的初始化。
python
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value