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

Cen*_*tAu 6 python function

是否可以使用修改后的默认参数为变量赋值?

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

def power(a, pow=2):
    ret = 1
    for _ in range(pow):
        ret *= a
    return ret

cube = power(pow=3)
Run Code Online (Sandbox Code Playgroud)

结果cube(5)应该是125.

ale*_*cxe 12

functools.partial 救援:

返回一个新的部分对象,当被调用时,其行为类似于使用位置参数args和关键字参数关键字调用的func.如果为调用提供了更多参数,则将它们附加到args.如果提供了其他关键字参数,则它们会扩展和覆盖关键字.

from functools import partial

cube = partial(power, pow=3)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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
Run Code Online (Sandbox Code Playgroud)


cht*_*mon 5

答案使用partial很好,使用标准库,但我认为值得一提的是以下方法是等效的:

def cube(a):
   return power(a, pow=3)
Run Code Online (Sandbox Code Playgroud)

即使这看起来不像是因为没有a =,但它做了很多相同的事情(将名称绑定到函数对象).我认为这通常更清晰.