我有一个功能
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()中使剪切参数可选,而不在权重'处给出默认值。因为这会给所有损失函数提供相同的默认值,而且这是错误的。
如何使权重中的剪切参数可选,这样如果我们不给出值,它会使用特定损失函数的默认值? (我知道我们可以设置默认裁剪=无并在损失函数中测试如果裁剪=无则设置裁剪= 2.38等...但我认为这样做的方式更为优雅。)
我试图以这种方式解决问题:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
但是如果我们想在没有指定max_iterations和容差的情况下给剪裁赋予特定值,那么它就不起作用。
任何想法如何以pythonic和优雅的方式解决这个问题?
答案 0 :(得分:1)
def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs['clipping'] = clipping
huber_loss(vector, **kwargs)
答案 1 :(得分:0)
您可以将max_iterations,tolerance和clipping用作**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)
你不需要通过你检查的所有kwargs
PS。如果你找到了你需要的答案 - 接受它:)