簡體   English   中英

元組中的星號,列表和集合定義,字典定義中的雙星號

[英]asterisk in tuple, list and set definitions, double asterisk in dict definition

我現在正在使用 Python 3.5 解釋器並發現非常有趣的行為:

>>> (1,2,3,"a",*("oi", "oi")*3)
(1, 2, 3, 'a', 'oi', 'oi', 'oi', 'oi', 'oi', 'oi')
>>> [1,2,3,"a",*range(10)]
[1, 2, 3, 'a', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ('aw','aw',*range(10),*(x**2 for x in range(10)))
('aw', 'aw', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
>>> {"trali":"vali", **dict(q=1,p=2)}
{'q': 1, 'p': 2, 'trali': 'vali'}
>>> {"a",1,11,*range(5)}
{0, 1, 2, 3, 4, 11, 'a'}

盡管我有多年的 Python 經驗,但我從未在文檔和示例中或任何源代碼中看到過。 我發現它非常有用。

從 Python 語法的角度來看,這對我來說似乎是合乎邏輯的。 函數參數和元組可以用相同或相似的狀態進行解析。

它是記錄在案的行為嗎? 它在哪里記錄?

哪些版本的 Python 具有此功能?

這是PEP-448: Additional Unpacking Generalizations ,它是 Python 3.5 中的新功能。

相關的變更日志在https://docs.python.org/3/whatsnew/3.5.html#pep-448-additional-unpacking-generalizations 中

PEP 448 擴展了*可迭代解包運算符和**字典解包運算符的允許用途。 現在可以在函數調用中使用任意數量的解包:

 >>> >>> print(*[1], *[2], 3, *[4, 5]) 1 2 3 4 5 >>> def fn(a, b, c, d): ... print(a, b, c, d) ... >>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4}) 1 2 3 4

同樣,元組、列表、集合和字典顯示允許多次解包:

 >>> >>> *range(4), 4 (0, 1, 2, 3, 4) >>> [*range(4), 4] [0, 1, 2, 3, 4] >>> {*range(4), 4, *(5, 6, 7)} {0, 1, 2, 3, 4, 5, 6, 7} >>> {'x': 1, **{'y': 2}} {'x': 1, 'y': 2}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM