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

lum*_*ked 7 python command-line kwargs python-2.7

我试图找出一种循环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])
Run Code Online (Sandbox Code Playgroud)

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

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

    ## Do things now with stuff
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏我是python的新手,仍然学习如何以pythonic的方式做事.

Dan*_*man 23

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

callable_method(user=user, **{option_name: user_defaults[option_name]})
Run Code Online (Sandbox Code Playgroud)