Functools — Python 中的高阶函数和对可调用对象的运算


在 Python 中,函数被称为高阶函数。这意味着它可以作为参数传递给另一个函数,并且/或者可以返回另一个函数。functools 模块为这种高阶函数提供了重要的实用程序。

partial() 函数

此函数返回一个可调用的“partial”对象。该对象本身的行为类似于函数。partial() 函数接收另一个函数作为参数,并冻结函数参数的一部分,从而产生一个具有简化签名的新的对象。

内置的 int() 函数将数字转换为十进制整数。int() 的默认签名是

int(x, base = 10)

partial() 函数可用于创建可调用的函数,其行为类似于 int() 函数,其中 base 参数默认为二。

>>> import functools
>>> binint = functools.partial(int, base = 2)
>>> binint('1001')
9

在以下示例中,用户定义的函数 myfunction() 被用作 partial 函数的参数,通过在原始函数的参数之一上设置默认值来实现。

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

更新于: 2019-07-30

211 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.