Python3.8对可迭代解包的改进及用法详解
Python3的可迭代解包
在PEP3132-ExtendedIterableUnpacking里面描述了一种对可迭代对象的解包用法,Python3可用:
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:fora,*bin[(1,2,3),(4,5,6,7)]: ...:print(b) ...: [2,3] [5,6,7]
挺方便的,ES6也有对应的destructuringassignment语法实现解包数组,不过人家实现的更彻底,还可以解包对象。
不过在Python3.2时引入了一个BUG。看一个例子:
In:defa(): ...:rest=(4,5,6) ...:t=1,2,3,*rest ...:returnt ...: In:foriina(): ...:print(i) ...:
其实这是一个非常简化的写法,要不然需要把1,2,3放在一个元组中,再+rest:
In:(1,2,3)+(3,4,5,6) Out:(1,2,3,4,5,6)
但是上面这个例子稍微改一下:
In:defb(): ...:rest=(4,5,6) ...:return1,2,3,*rest File"",line3 return1,2,3,*rest ^ SyntaxError:invalidsyntax
不用变量t,直接返回就会抛SyntaxError,另外就是yield(当然要注意return和yield本身的意见不同啊):
In:defc(): ...:rest=(4,5,6) ...:yield1,2,3,*rest File"",line3 yield1,2,3,*rest ^ SyntaxError:invalidsyntax Python3.8
在Python3.8,修复了这个问题:
>>>defb(): ...rest=(4,5,6) ...return1,2,3,*rest ... >>>foriinb(): ...print(i) ... >>>defc(): ...rest=(4,5,6) ...yield1,2,3,*rest ... >>>foriinc(): ...print(i) ... (1,2,3,4,5,6)
你学到了么?
延伸阅读
总结
以上所述是小编给大家介绍的Python3.8对可迭代解包的改进及用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!