Python3.8對可迭代解包的改進及用法詳解
Python 3 的可迭代解包
在 PEP 3132 - Extended Iterable Unpacking 里面描述了一種對可迭代對象的解包用法,Python 3 可用:
In : a, *b, c = range(5) In : a, c Out: (0, 4) In : b Out: [1, 2, 3] In : *a, = range(5) In : a Out: [0, 1, 2, 3, 4] In : for a, *b in [(1, 2, 3), (4, 5, 6, 7)]: ...: print(b) ...: [2, 3] [5, 6, 7]
挺方便的,ES6 也有對應的destructuring assignment語法實現(xiàn)解包數(shù)組,不過人家實現(xiàn)的更徹底,還可以解包對象。
不過在 Python 3.2 時引入了一個 BUG??匆粋€例子:
In : def a(): ...: rest = (4, 5, 6) ...: t = 1, 2, 3, *rest ...: return t ...: In : for i in a(): ...: print(i) ...:
其實這是一個非常簡化的寫法,要不然需要把 1,2,3 放在一個元組中,再 + rest:
In : (1, 2, 3) + (3, 4, 5, 6) Out: (1, 2, 3, 4, 5, 6)
但是上面這個例子稍微改一下:
In : def b():
...: rest = (4, 5, 6)
...: return 1, 2, 3, *rest
File "<ipython-input-38-b5a7115853e2>", line 3
return 1, 2, 3, *rest
^
SyntaxError: invalid syntax
不用變量 t, 直接返回就會拋 SyntaxError,另外就是 yield (當然要注意 return 和 yield 本身的意見不同啊):
In : def c():
...: rest = (4, 5, 6)
...: yield 1, 2, 3, *rest
File "<ipython-input-39-cf6991fcff64>", line 3
yield 1, 2, 3, *rest
^
SyntaxError: invalid syntax
Python 3.8
在 Python 3.8,修復了這個問題:
>>> def b(): ... rest = (4, 5, 6) ... return 1, 2, 3, *rest ... >>> for i in b(): ... print(i) ... >>> def c(): ... rest = (4, 5, 6) ... yield 1, 2, 3, *rest ... >>> for i in c(): ... print(i) ... (1, 2, 3, 4, 5, 6)
總結(jié)
以上所述是小編給大家介紹的Python3.8對可迭代解包的改進及用法詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關文章
python實現(xiàn)測試工具(二)——簡單的ui測試工具
這篇文章主要介紹了python如何實現(xiàn)簡單的ui測試工具,幫助大家更好的利用python進行測試工作,感興趣的朋友可以了解下2020-10-10
linux 下python多線程遞歸復制文件夾及文件夾中的文件
這篇文章主要介紹了linux 下python多線程遞歸復制文件夾及文件夾中的文件,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Python自動打印被調(diào)用函數(shù)變量名及對應值?
這篇文章主要介紹了Python自動打印被調(diào)用函數(shù)的變量名及對應的值,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價,需要的朋友可以參考一下?2022-07-07
python讀取word 中指定位置的表格及表格數(shù)據(jù)
這篇文章主要介紹了python讀取word 中指定位置的表格及表格數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2019-10-10

