是否可以使用修改后的默认参数为变量分配函数?
为了使其更具体,我举一个例子。 以下显然不适用于当前形式,仅用于显示我需要的内容:
@Component
def power(a, pow=2):
ret = 1
for _ in range(pow):
ret *= a
return ret
cube = power(pow=3)
的结果应为cube(5)
。
答案 0 :(得分:10)
返回一个新的部分对象,当调用它时,其行为类似于使用位置参数args和keyword arguments关键字调用的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
答案 1 :(得分:5)
使用partial
的答案很好,使用标准库,但我认为值得一提的是以下方法是等效的:
def cube(a):
return power(a, pow=3)
尽管这看起来并不像分配因为没有=
,但它做了很多相同的事情(将名称绑定到函数对象)。我认为这通常更清晰。
答案 2 :(得分:2)
具体来说,指数的特殊功能是:
>>> 2**3
8
但我也用lambda函数解决了它,这是一个更好的函数指针版本。
# cube = power(pow=3) # original
cube = lambda x: power(x,3)