Functools-Python中可调用对象的高阶函数和操作
据说Python中的函数具有较高的顺序。这意味着它可以作为参数传递给另一个函数和/或也可以返回其他函数。functools模块为此类高阶函数提供了重要的实用程序。
partial()函数
该函数返回一个可调用的“部分”对象。对象本身的行为就像一个函数。该partial()
函数接收另一个函数作为参数,并冻结函数参数的某些部分,从而生成具有简化签名的新对象。
内置int()
函数将数字转换为十进制整数。的默认签名int()
为
int(x, base = 10)
该partial()
函数可用于创建行为类似于该int()
函数的可调用对象,其中基本参数默认为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描述符,该描述符的行为类似于partial,只是它被设计为用作方法定义而不是可直接调用的。
Cmp_to_key()函数
Python2.x具有cmp()
用于比较两个对象的功能。Python3已弃用它。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()
函数定义为返回两个数字的乘积。该函数reduce()
与1到10之间的数字范围一起使用。输出的阶乘值为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