什么 functools.partial
是:
-
使用已填写一个或多个参数的函数创建新的版本。
-
新版本的功能是基于旧版本的。
接下来,我将使用代码来解释这是如何工作的,而不是深入解释他的代码。
简单用法
首先,假设创建一个明确执行幂运算的函数。通过这种方式,我们可以在任何数量上获得 平方,立方和其他次方的操作。其实下面的函数就是模仿了Python的内置pow()
函数
-
def power(base, exponent):
-
return base ** exponent
现在,如果想要具有power()
函数的平方和立方函数呢?当然,我们可以这样做:
-
def square(base):
-
return power(base, 2)
-
def cube(base):
-
return power(base, 3)
当然没有问题,但是如果我们想要创建15或20个power()
函数变体呢?他们中的1000个呢?不用说,写这么多重复的代码是烦人的。这是partial发挥作用的时候了。我们可以使用partial重写我们的square和cube函数,并使用py.test测试它是否成功 :
-
from functools import partial
-
square = partial(power, exponent=2)
-
cube = partial(power, exponent=3)
-
def test_partials():
-
assert square(2) == 4
-
assert cube(2) == 8
即可 OK!