2012-06-11 36 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。