最简洁的Python方法:用变量作为关键字赋值参数?

17 投票
2 回答
13665 浏览
提问于 2025-04-16 23:05

什么是最符合Python风格的方法来解决下面这个问题?在交互式命令行中:

>>> 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 个回答

7

在很多情况下,你可以直接使用

f(kw)

因为关键字参数不一定要被指定为关键字,只要你在它们之前指定了所有的参数。

Python 3 有一种语法用于仅限关键字的参数,但默认情况下并不是这样。

或者,基于 @zeekay 的回答,

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

如果你不想把 kw 存储为字典,比如说你还想把它用作其他地方字典查找的键。

44

使用关键字参数解包

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

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

撰写回答