使用变量作为关键字来分配关键字参数的最 Pythonic 方式?

发布于 2024-11-28 03:33:44 字数 627 浏览 2 评论 0原文

解决以下问题的最 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'

目前我正在使用以下方法解决它:

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

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

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

What is the most pythonic way to get around the following problem? From the interactive 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'

For the moment I'm getting around it with the following:

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

but it seems quite clumsy...

(Either python 2.7+ or 3.2+ solutions are ok)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玩物 2024-12-05 03:33:44

使用关键字参数解包

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

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

Use keyword argument unpacking:

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

>>> f(**kw)
<<< 'a was True'
始终不够爱げ你 2024-12-05 03:33:44

在许多情况下,如果您在关键字参数之前指定了所有参数,则可以直接使用

f(kw)

关键字参数,而不必将其指定为关键字。

Python 3 有一个仅关键字参数的语法,但事实并非如此默认情况下。

或者,基于 @zeekay 的答案,

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

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

In many circumstances you can just use

f(kw)

as keyword arguments don't have to be specified as keywords, if you specify all arguments before them.

Python 3 has a syntax for keyword only arguments, but that's not what they are by default.

Or, building on @zeekay's answer,

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

if you don't want to store kw as a dict, for example if you're also using it as a key in a dictionary lookup elsewhere.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文