我正在研究一个机器学习程序,该程序具有很多元参数。该程序的预期用途是研究学习过程本身,因此,我希望我将在许多不同的时间训练模型,每次更改元参数的子集,并将其余参数保留为默认值。
我认为实现此目的的最佳方法是使用默认参数字典,该参数字典中的任何值都可以由用户覆盖。
DEFAULT_PARAMETERS={
"parameter_1": 1,
"parameter_2": 2,
#...
}
def main(**kwargs):
parameters = {}
for key in DEFAULT_PARAMETERS:
if key in kwargs:
parameters[key] = kwargs[key]
else:
parameters[key] = DEFAULT_PARAMETERS[key]
但是,我从来没有见过人们使用这种方法,为什么没有呢?另外,是否有一种列表理解语法,可以让我在一行中实现上述循环?
答案 0 :(得分:3)
对于python 3.5 +
merged = { **DEFAULT_PARAMETERS, **kwargs }
这可以解决问题。 **
语法扩展了字典。
小心!订单很重要!
答案 1 :(得分:2)
但是,我从未见过有人使用这种方法
您是否了解其他人的代码?可能不是(提示:这是一种非常常见的模式,但实际上已实现)
有没有理由吗?
不,这只是显而易见的事情。
还有,列表理解语法是否可以让我在一行中实现上述循环?
对于python 3.5+,您可以尝试使用Vittorio Camisa的解决方案,但是该解决方案可以在Python 3.x和最新的Python 2.7.x版本中使用:
parameters = {k: kwargs.get(k, v) for k, v in DEFAULT_PARAMETERS.items()}