Python,将函数赋值给变量,改变可选参数的值

时间:2016-01-03 05:11:11

标签: python function

是否可以使用修改后的默认参数为变量分配函数?

为了使其更具体,我举一个例子。 以下显然不适用于当前形式,仅用于显示我需要的内容:

@Component

def power(a, pow=2): ret = 1 for _ in range(pow): ret *= a return ret cube = power(pow=3) 的结果应为cube(5)

3 个答案:

答案 0 :(得分:10)

functools.partial救援:

  

返回一个新的部分对象,当调用它时,其行为类似于使用位置参数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)