我有一个功能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)