繁体   English   中英

双星号 (**) 运算符给出不同的结果

[英]Double asterisk (**) operator gives different results

我有以下代码

from werkzeug.datastructures import ImmutableMultiDict
f = ImmutableMultiDict([('name', ''), ('desc', 'example'), ('species', '1747')])
def print_data(name, desc, species):
    print(desc)

print_data(**f)

在 python 3.6.1 上,结果是

['example']

在 python 3.7.2 上,结果是

'example'

我找不到有关此更改的任何信息。 它是 python 版本的结果似乎很奇怪(但其他一切都一样(werkzeug v1.0.1))

我是对的,这是一个蟒蛇吗? 谁能指出我的发行说明(是的,我搜索过但没有找到......)

是的,CPython 在 3.7.1 中改变了行为。 在 Werkzeug 上解释此错误报告,其中还包含解决方案:

CPython [..] 改变了 [..] **kwargs的实现以使用data.items()而不是dict.items(data)解包 MultiDict.items()总是返回第一个值,所以 CPython [是] 以前 [..] 使用dict.items(data) [..]

 m = MultiDict({"x": [1, 2]}) m.items() [("x", 1)] dict.items(m) [("x", [1, 2])]

Werkzeug 对此无能为力,我们不会改变MultiDict.items()工作方式。

我什至不确定**MultiDict是否曾经打算工作。 使用data.as_dict(flat=False)获取要解压的dict

 m.as_dict(flat=False) {"x": [1, 2]} fn(**m.as_dict(flat=False)) {"x": [1, 2]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM