2016-04-28 72 views
0

我有一個函數的Python:用於功能可選參數調用下級功能

def weights(vector, loss_function, clipping, max_iterations=100, tolerance=1e-5)

這需要調用它可以是任何的這些與載體和參數削波傳遞一個較低的水平損失函數:

huber_loss(vector, clipping=2.38) cauchy_loss(vector, clipping=3.27) bisquare_loss(vector, clipping=1.04)

每個損失函數有一個特殊的適當的默認限幅值,所以我們可以稱它們爲任一huber_loss(載體)或huber_loss(矢量,2)例如。

我想使權重()中的裁剪參數爲可選,而不在權重級別給出默認值,因爲這會爲所有損失函數提供相同的默認值,這是錯誤的。

如何在權重中使裁剪參數可選,以便如果我們不給出值,它將使用特定損失函數的默認值? (我知道我們可以設置默認的裁剪=無,並在損失函數中測試,如果裁剪=無,然後設置clipping = 2.38等,但我認爲有一個更優雅的方式來做到這一點)。

我試圖解決這個問題的方法:

weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)

,但如果我們想給一個特定的值,無需指定max_iterations和它不工作公差限幅。

任何想法如何用pythonic和優雅的方式解決這個問題?

+0

你是否使用''''''clip'''''vector'''只限於調用'''loss_function' ''? –

回答

1
def weights(vector, loss_function, clipping=None, 
      max_iterations=100, tolerance=1e-5) 

kwargs = {} 
if clipping: 
    kwargs['clipping'] = clipping 

huber_loss(vector, **kwargs) 
0

您可以使用max_iterations,寬容和裁剪爲**kwargs,檢查按鍵的存在內部參數

def weights(vector, loss_function, **kwargs): 
    if kwargs['max_iterations']: 
    max_iterations = kwargs['max_iterations'] 
    else: 
    max_iterations = 100 
    ... # and so go on for clipping and tolerance 

weights(vect, lf, maxa_iterations=5, clipping=2) 

你不需要通過你檢查

PS所有kwargs。如果你找到一個你需要的答案 - 接受它:)