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()函数

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()函数定义为返回两个数字的乘积。该函数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