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,例如,如果您在其他地方的字典查找中也使用它作为键。