使用字符串变量** kwargs作为命名参数

时间:2013-04-11 13:16:46

标签: python command-line python-2.7 kwargs

我试图想出一种循环json配置文件的方法,并使用键名作为使用** kwargs的方法的参数名。我创建了一个json配置文件,并使用键名作为方法。我只是将“set_”附加到键名称以调用正确的方法。我将json转换为字典以循环任何默认值。我想通过字符串变量将参数名称传递给** kwargs。我试图传递一本字典,但似乎并不喜欢。

user_defaults = config['default_users'][user]

for option_name, option_value in user_defaults.iteritems():
    method = "set_" + option_name
    callable_method = getattr(self, method)
    callable_method(user = user, option_name = user_defaults[option_name])

调用上面的callable_method将“option_name”作为kwarg的实际名称。我想传递它,以便当“shell”= option_name时它将作为参数名称的字符串名称传递。一个例子如下。这样我就可以遍历配置中的任何键,而不用担心我在为完成某些事情而编写的任何方法中寻找的内容。

def set_shell(self, **kwargs): 
    user  = kwargs['user']
    shell = kwargs['shell']

    ## Do things now with stuff

感谢任何帮助我是python的新手,仍在学习如何以pythonic的方式做事。

1 个答案:

答案 0 :(得分:23)

如果我正确理解你所问的内容,你可以使用调用方的**语法来传递转换为kwargs的字典。

callable_method(user=user, **{option_name: user_defaults[option_name]})