说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的 functools 模块应用于高阶函数,即参数或(和)返回值为其他函数的函数。 通常来说,此模块的功能适用于所有可调用对象。Python 是的所谓高阶函数(Higher Order Function)可以查看教程:高阶函数。
Python 中的 functools 模块处理高阶函数,即在函数上操作(作为参数)或返回函数和其他此类可调用对象的函数。functools 模块提供了一系列方法,如 cached_property(func)、 cmp_to_key(func)、lru_cache(func)、wraps(func) 等。值得注意的是,这些方法将函数作为参数。
functools 的一些装饰器和函数都非常实用,有助于我们简化我们解决一些复杂问题和提高程序的性能。
对一些函数进行了专门的介绍:
将(旧式的)比较函数转换为新式的 key function . 在类似于 sorted() 等函数的 key 参数中使用。此函数主要用作将 Python 2 程序转换至新版的转换工具,以保持对比较函数的兼容。
详情:cmp_to_key(func)。
返回一个新的 partial 对象(部分对象),又称偏函数,主要用途是减少可调用对象的参数个数,当被调用时其行为类似于 func 附带位置参数 args 和关键字参数 keywords 被调用。
详情:partial(func)。
语法为 functools.reduce(function, iterable[, initializer])
,将两个参数的 function 从左至右积累地应用到 iterable 的条目,以便将该可迭代对象缩减为单一的值。
详情:reduce()。
此方法用于更新包装函数的元数据,以反映包装函数的元数据,从而提高代码的可读性和可重用性。
详情:update_wrapper()。
functools 提供以下类,可以通过对这些类的实例化,实现相应的功能:
class functools.partialmethod(func, /, *args, **keywords)
返回一个新的 partialmethod 描述器,其行为类似 partial 但它被设计用作方法定义而非直接用作可调用对象。
详情:partialmethod()。
它用在给定一个声明一个或多个全比较排序方法的类中,这个类装饰器实现剩余的方法,这样减轻了指定所有可能的全比较操作的工作。
详情:@total_ordering。
这是简单轻量级无界函数(unbounded function)缓存。 有时称为 "memoize"(记忆化)。3.9 新版功能。
详情:@cache。
将类的方法转换为一个属性,该属性的值计算一次,然后在实例的生命周期中将其缓存作为普通属性。与 property() 类似,但添加了缓存,对于在其他情况下实际不可变的高计算资源消耗的实例特征属性来说该函数非常有用。它是 Python 3.8 新版功能。
详情:cached_property。
一个为函数提供缓存功能的装饰器,缓存 maxsize 组传入参数,在下次以相同参数调用时直接返回上一次的结果。用以节约高开销或 I/O 函数的调用时间。
详情:@lru_cache。
要定义一个泛型函数,应使用 @singledispatch 装饰器进行装饰。泛型函数可以实现第一个参数的数据类型不同,其调用的函数也就不同。
可以将类中的方法单分派来定义泛型方法函数,分派发生在第一个非 self 或非 cls 参数的类型上。
Python 装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不受影响,Python 的 functools 包中提供了一个 @wraps 的装饰器来消除这样的副作用。
详情:@wraps 修饰器
更新时间:2022-01-22 00:12:44 标签:python 函数 高阶函数