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

Most pythonic way of assigning keyword arguments using a variable as keyword?

解决以下问题最简单的方法是什么?从交互式shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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'

就目前而言,我正着手解决以下问题:

1
2
3
>>> exec 'result = f(%s=val)' % kw
>>> result
'a was True'

但看起来很笨拙…

(python 2.7+或3.2+解决方案都可以)


使用关键字参数解包:

1
2
3
4
>>> kw = {'a': True}

>>> f(**kw)
<<< 'a was True'

在许多情况下,您可以使用

1
f(kw)

如果在关键字参数之前指定所有参数,则不必将其指定为关键字。

python 3有一个只用于关键字参数的语法,但这不是它们默认的语法。

或者,基于@zeekay的答案,

1
2
kw = 'a'
f(**{kw: True})

如果您不想将kw存储为dict,例如,如果您在其他地方的字典查找中也使用它作为键。