使用partial()函数应用部分参数,partial()
函数生成的是所谓的“部分应用”。部分应用的函数是基于旧函数及其部分参数生成的新函数,与柯里化密切相关。由于Python函数不是通过柯里化实现的,因此这里不介绍其理论背景。不过这个概念有助于我们理解简化。
示例如下:
>>> exp2 = partial(pow, 2)
>>> exp2(12)
4096
>>> exp(17)-1
131071
这里创建了函数exp2(y)
,实际上是pow(2, y)
。partial()
函数将pow()
函数的第一个位置参数与pow()
函数绑定,当对新生成的exp2()
函数求值时,通过partial()
绑定的参数和exp2()
自己的参数参与了求值。
位置参数的绑定是按照从左到右的严格顺序完成的。如果函数接收关键字参数,也按相同的规则进行。
部分应用函数也可以通过匿名函数实现,如下所示:
exp2 = lambda y: pow(2, y)
两种实现的效果完全一致。性能测试表明partial()
函数比匿名函数实现的方式略快:
partial()
: 0.37- 匿名函数:0.42
100万次循环运行快0.05秒,优势不明显。
由于匿名函数方式能实现partial()
函数的所有功能,暂不详述。