簡體   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