Python Functools


该模块设计的目的是包含一些面向函数式编程的接口,具有两个功能:
对函数执行前进行修饰,将函数作为返回值。任何可调用对象都符合该模块的设计理念。

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)

  1. 提供一个定义复杂排序条件的函数接口。python 3 的 sort 函数只支持从单个元素角度定义排序条件,该函数可以从两个元素角度定义排序条件。

  2. 返回值为严格的 +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)

  1. 将原函数的一些参数固定为值,返回新函数。

  2. 在新函数被调用时,如果传入的参数与原函数中被固定的参数值冲突,会进行覆写。

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])

  1. 将一个可迭代对象的元素从左向右,依次输入到函数对象中。
  2. 如果初始化元素为空(默认),则把前两个元素先输入到函数对象进行结果的初始化。
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

文章作者: 一汪白水
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 一汪白水 !