我有一个功能

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(vector)或huber_loss(vector,2)。

我想在weights()中使裁剪参数成为可选参数,而不在权重级别提供默认值,因为这将为所有损失函数提供相同的默认值,这是错误的。

如何使裁剪参数的权重为可选,以便如果我们不给出值,则使用特定损失函数的默认值? (我知道我们可以设置默认Clipping = None并在损失函数中进行测试,如果Clipping = None,然后设置Clipping = 2.38等。但是我认为有一种更优雅的方法可以做到)。

我试图以这种方式解决问题:

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

但是如果我们想给裁剪指定一个特定的值而没有指定max_iterations和公差,那是行不通的。

知道如何以pythonic和优雅的方式解决此问题吗?

最佳答案

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

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

huber_loss(vector, **kwargs)

10-02 17:59