簡體   English   中英

僅設置一個參數即可從舊函數生成新函數

[英]Generate new function from old function with only one argument set

假設我有一個功能

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”相同的新函數,但要設置第一個參數,而所有后續參數都保持打開狀態。

有沒有辦法做到這一點?

試試functools.partial

from functools import partial

new_function = partial( oldfunction, 10 )

下面的示例允許您將10綁定到oldfunction的第一個參數位置,然后在* args中提供其余兩個參數。 因此,請嘗試以下操作:

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

這可能是一個功能性的解決方案,對於您的確切情況,您的代碼將如下所示:

from functools import partial

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

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

10是綁定到oldfunction的第一個參數,后跟* args。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM