我具有以下功能:
def train(data,**kwargs):
train_model(data,**kwargs)
def test_train_parameters(data1,data2,parameter_to_test, parameter_value):
train(data1,**kwargs)
train(data2,**kwargs)
Train函数具有一些可选参数,例如gamma,lambda,num_rounds等。使用data1的训练将在不修改任何参数的情况下被调用,但是使用data2的训练将在修改参数及其值的情况下被调用。例如,假设我想要gamma = 5,我会编写代码:
test_train_parameters(parameter_to_test = 'gamma', parameter_value = 5)
该函数将如下调用:
train(data1)
train(data2, gamma = 5)
因此,不能仅将参数调用为test_train_parameters(gamma = 5)
,因为它会干扰首列火车。
我一直在Google上进行搜索,但找不到适合我的情况的东西(我已经找到了eval,getattr,通过列表...,但这些都是用于其他用途)。我该怎么做?
答案 0 :(得分:4)
在python中,kwargs只是字典,因此您可以使用参数在函数中创建字典:
def test_train_parameters(data1,data2,parameter_to_test, parameter_value):
train(data1)
kwargs = {parameter_to_test: parameter_value}
train(data2,**kwargs)
答案 1 :(得分:1)
带有每个可能参数的if
?喜欢
def test_train_parameters(data1,data2,parameter_to_test, parameter_value):
train(data1)
if parameter_to_test == 'alpha':
train(data2, alpha=parameter_value)
elif parameter_to_test == 'beta':
train(data2, beta=parameter_value)
elif parameter_to_test == 'gamma':
train(data2, gamma=parameter_value)
我知道这并不令人愉悦,但这是一种简单的方法。