解决以下问题的最热门方式是什么?从交互式shell:
>>> def f(a=False):
... if a:
... return 'a was True'
... return 'a was False'
...
>>> f(a=True)
'a was True'
>>> kw = 'a'
>>> val = True
>>> f(kw=val)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got an unexpected keyword argument 'kw'
目前我正在解决以下问题:
>>> exec 'result = f(%s=val)' % kw
>>> result
'a was True'
但是看起来很笨拙......
(python 2.7+或3.2+解决方案都可以)
答案 0 :(得分:32)
>>> kw = {'a': True}
>>> f(**kw)
<<< 'a was True'
答案 1 :(得分:4)
在许多情况下,您只需使用
即可f(kw)
作为关键字参数,如果在它们之前指定所有参数,则不必指定为关键字。
Python 3的语法为keyword only arguments,但默认情况下并非如此。
或者,建立在@ zeekay的答案上,
kw = 'a'
f(**{kw: True})
如果您不想将kw存储为dict,例如,如果您还将其用作其他地方的字典查找中的键。