关于python:使用字符串变量** kwargs作为命名参数

Use string variable **kwargs as named argument

我正试图找出一种方法,通过JSON配置文件进行循环,并使用一个键名作为参数名,将其用于使用**kwargs的方法。我创建了一个JSON配置文件,并使用键名作为方法。我只是在键名后面加上"set_uu"来调用正确的方法。我将JSON转换成一个字典来循环遍历任何缺省值。我想通过一个字符串变量将参数名传递给**Kwargs。我试图通过一本词典,但似乎不喜欢。

1
2
3
4
5
6
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_方法会传递"option_name"作为Kwarg的实际名称。我想传递它,以便当"shell"=选项名称时,它作为参数名称的字符串名称传递。下面是一个例子。这样我就可以循环使用配置中的任何键,而不用担心我要用任何方法来完成某件事情。

1
2
3
4
5
def set_shell(self, **kwargs):
    user  = kwargs['user']
    shell = kwargs['shell']

    ## Do things now with stuff

任何帮助我都很感激,我是新来的Python,仍然在学习如何做的事情,以Python的方式。


如果我正确理解了你的要求,你可以在主叫端使用**语法来传递一个转换成kwargs的dict。

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