【发布时间】:2016-01-03 05:11:10
【问题描述】:
是否可以将函数分配给具有修改的默认参数的变量?
为了更具体,我举个例子。 以下显然不适用于当前形式,仅用于显示我需要的内容:
def power(a, pow=2):
ret = 1
for _ in range(pow):
ret *= a
return ret
cube = power(pow=3)
而cube(5) 的结果应该是125。
【问题讨论】:
是否可以将函数分配给具有修改的默认参数的变量?
为了更具体,我举个例子。 以下显然不适用于当前形式,仅用于显示我需要的内容:
def power(a, pow=2):
ret = 1
for _ in range(pow):
ret *= a
return ret
cube = power(pow=3)
而cube(5) 的结果应该是125。
【问题讨论】:
返回一个新的部分对象,当调用它时,它的行为类似于使用位置参数 args 和关键字参数关键字调用的 func。如果为调用提供了更多参数,则将它们附加到 args。如果提供了额外的关键字参数,它们会扩展和覆盖关键字。
from functools import partial
cube = partial(power, pow=3)
演示:
>>> from functools import partial
>>>
>>> def power(a, pow=2):
... ret = 1
... for _ in range(pow):
... ret *= a
... return ret
...
>>> cube = partial(power, pow=3)
>>>
>>> cube(5)
125
【讨论】:
使用partial的答案很好,使用标准库,但我认为值得一提的是,以下方法是等效的:
def cube(a):
return power(a, pow=3)
尽管这看起来不像赋值,因为没有=,但它做的事情大致相同(将名称绑定到函数对象)。我认为这通常更清晰。
【讨论】:
具体来说,指数有一个特殊的功能:
>>> 2**3
8
但我也用 lambda 函数解决了这个问题,它是函数指针的更好版本。
# cube = power(pow=3) # original
cube = lambda x: power(x,3)
【讨论】: