使用字符串作为参数名称

时间:2019-08-08 16:04:31

标签: python function

我具有以下功能:

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,通过列表...,但这些都是用于其他用途)。我该怎么做?

2 个答案:

答案 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)

我知道这并不令人愉悦,但这是一种简单的方法。