2012-06-11 35 views
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”相同的新函数,但是第一个参数设置为,并且所有后续参数保持打开状态。

有没有办法做到这一点?

回答

3

下面的示例允许您10结合到第一个参数位置在oldfunction然后在* ARGS供给剩余的两个参数。所以,试试这个:

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

这可以是一个实用的解决方案,你的代码看起来像这样为您的确切情况:

from functools import partial 

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

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

10势必为oldfunction第一个参数,其次由* args。