python : optional arguments for function calling lower level functions

标签 python optional-parameters

我有一个函数

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/

相关文章:

python - 如何在python vscode中管理多个src目录?

python - PIL 从 I;16 转换为 JPEG 产生白色图像

c# - 是否可以在 C# 中限制可选参数的值?

java - 如何定义用户定义的 java 运行时可选命令行参数

c# - 如何创建可选的 DateTime 参数?

python - 在列中搜索单词列表,如果找到单词则创建一个 boolean 列

python - 从 Frozen Tensorflow Estimator Graph 获取输入名称?

python - 绘制条形图和 Groupby 关键字

c# - 如何传递带有可选参数作为参数的方法?

regex - 多个捕获组 - 全部可选