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

11 python keyword-argument

什么是解决以下问题的最pythonic方法?从交互式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'
Run Code Online (Sandbox Code Playgroud)

目前我正在解决以下问题:

>>> exec 'result = f(%s=val)' % kw
>>> result
'a was True'
Run Code Online (Sandbox Code Playgroud)

但它看起来很笨拙......

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

zee*_*kay 34

使用关键字参数解包:

>>> kw = {'a': True}

>>> f(**kw)
<<< 'a was True'
Run Code Online (Sandbox Code Playgroud)


agf*_*agf 5

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

f(kw)
Run Code Online (Sandbox Code Playgroud)

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

Python 3具有仅关键字参数的语法,但是默认情况下不是这样。

或者,以@zeekay的答案为基础,

kw = 'a'
f(**{kw: True})
Run Code Online (Sandbox Code Playgroud)

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