我有一个函数
def 权重(向量、loss_function、裁剪、max_iterations=100、公差=1e-5)
需要调用一个较低级别的损失函数,该函数可以是参数中传递的向量和裁剪中的任何一个:
huber_loss(向量,裁剪=2.38)
cauchy_loss(向量,裁剪=3.27)
bisquare_loss(向量,裁剪=1.04)
每个损失函数都有一个特殊的适当的默认裁剪值,因此我们可以将它们称为 huber_loss(vector) 或 huber_loss(vector,2)。
我想在weights()中使裁剪参数可选,而不在权重级别给出默认值,因为这会给所有损失函数提供相同的默认值,这是错误的。
如何使权重中的裁剪参数可选,以便在我们不给出值时它使用特定损失函数的默认值? (我知道我们可以设置默认的 Clipping=None 并在损失函数中进行测试,如果 Clipping=None 然后设置 Clipping = 2.38 等。但我认为有一种更优雅的方法来做到这一点)。
我尝试以这种方式解决问题:
权重(向量,loss_function,max_iterations=100,容差=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)
关于 python : optional arguments for function calling lower level functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36913256/