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