使用变量作为关键字分配关键字参数的大多数pythonic方式?

时间:2011-08-08 00:01:06

标签: python keyword-argument

解决以下问题的最热门方式是什么?从交互式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+解决方案都可以)

2 个答案:

答案 0 :(得分:32)

使用keyword argument unpacking

>>> 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,例如,如果您还将其用作其他地方的字典查找中的键。