[英]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.