Python : 函数调用低级函数的可选参数
Python : optional arguments for function calling lower level functions
我有一个功能
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 并在损失函数中测试 if clipping=None 然后设置 clipping = 2.38 等等。但我认为有更优雅的方法来做到这一点)。
我试过这样解决问题:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
但是如果我们想在不指定 max_iterations 和公差的情况下为裁剪指定特定值,则它不起作用。
知道如何以 pythonic 和优雅的方式解决这个问题吗?
您可以使用 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)
你不需要传递你检查的所有 kwargs
PS。如果您找到所需的答案 - 接受它:)
def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs['clipping'] = clipping
huber_loss(vector, **kwargs)
我有一个功能
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 并在损失函数中测试 if clipping=None 然后设置 clipping = 2.38 等等。但我认为有更优雅的方法来做到这一点)。
我试过这样解决问题:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
但是如果我们想在不指定 max_iterations 和公差的情况下为裁剪指定特定值,则它不起作用。
知道如何以 pythonic 和优雅的方式解决这个问题吗?
您可以使用 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)
你不需要传递你检查的所有 kwargs
PS。如果您找到所需的答案 - 接受它:)
def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs['clipping'] = clipping
huber_loss(vector, **kwargs)