仅使用一个参数集从旧函数生成新函数

时间:2012-06-11 17:40:37

标签: python function lambda arguments

假设我有一个功能

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”相同的新函数,但是第一个参数设置,所有后续参数都保持打开状态。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:7)

尝试functools.partial

from functools import partial

new_function = partial( oldfunction, 10 )

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

这可以是一个功能性解决方案,您的代码看起来就像这样:

from functools import partial

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

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

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