1

假设我有一个功能

def oldfunction(arg1,arg2,arg3):
    print(arg1,arg2,arg3)

我想创建一个新函数,其中我将第一个参数设置为 10。新函数的行为将是:

>>> new_function(20,"30")
10 20 '30'

一种方法是使用 lambda 函数:

>>> newfunction = lambda arg2,arg3: function(10,arg2,arg3)
>>> newfunction("ten",[10])
(10, 'ten', [10])

但是,假设我事先不知道“oldfunction”需要多少参数。我仍然想创建一个与“oldfunction”相同的新函数,但设置了第一个参数,并且所有后续参数都保持打开状态。

有没有办法做到这一点?

4

3 回答 3

8

试试functools.partial

from functools import partial

new_function = partial( oldfunction, 10 )
于 2012-06-11T17:44:58.293 回答
3

以下示例允许您将 10 绑定到 oldfunction 中的第一个参数位置,然后在 *args 中提供剩余的两个参数。所以,试试这个:

def newfunction(*args):
    return oldfunction(10, *args)
于 2012-06-11T17:45:18.700 回答
0

这可以是一个功能性解决方案,您的代码在您的具体情况下看起来像这样:

from functools import partial

def newfunction(*args):
    return oldfunction(10, *args)

newfunction(20, 30)
(10, 20, 30)

10 被绑定为 oldfunction 的第一个参数,然后是 *args。

于 2012-06-11T18:09:56.473 回答