Functools — Python 中可调用对象的高阶函数和操作
pythonserver side programmingprogramming更新于 2023/12/23 3:30:00
Python 中的函数被称为高阶函数。这意味着它可以作为参数传递给另一个函数和/或也可以返回其他函数。functools 模块为此类高阶函数提供了重要的实用程序。
partial() 函数
此函数返回一个可调用的"partial"对象。该对象本身的行为类似于函数。partial() 函数接收另一个函数作为参数并冻结函数参数的某些部分,从而产生具有简化签名的新对象。
内置 int() 函数将数字转换为十进制整数。 int() 的默认签名是
int(x, base = 10)
partial() 函数可用于创建一个可调用函数,其行为类似于 int() 函数,其中 base 参数默认为 2。
>>> import functools >>> binint = functools.partial(int, base = 2) >>> binint('1001') 9
在下面的示例中,通过在原始函数的一个参数上设置默认值,将用户定义的函数 myfunction() 用作部分函数的参数。
>>> def myfunction(a,b): return a*b >>> partfunction = functools.partial(myfunction,b = 10) >>> partfunction(10) 100
partialmethod()
此函数返回一个新的 partialmethod 描述符,其行为类似于 partial,只是它被设计为用作方法定义,而不是直接可调用。
Cmp_to_key() 函数
Python 2.x 有 cmp() 函数用于比较两个对象。Python 3 已弃用它。functools 模块提供了 cmp_to_key() 函数,通过它可以执行用户定义类的对象比较
from functools import cmp_to_key class test: def __init__(self,x): self.x = x def __str__(self): return str(self.x) def cmpr( a,b): if a.x> = b.x: return True if a.x<b.x: return False mykey = cmp_to_key(cmpr)
reduce() 函数
reduce() 函数接收两个参数,一个函数和一个可迭代对象。但是,它返回单个值。参数函数从左到右累积应用列表中的两个参数。第一次调用的函数结果成为第一个参数,列表中的第三个项目成为第二个参数。重复此操作,直到列表用尽。
在下面的示例中,mult() 函数被定义为返回两个数字的乘积。此函数与 1 到 10 之间的数字范围一起用于 reduce() 函数。输出是阶乘值 10。
import functools def mult(x,y): return x*y num = functools.reduce(mult, range(1,11)) print ('factorial of 10: ',num)
输出
factorial of 10: 3628800