這個問題源於PEP 448
-- Additional Unpacking Generalizations,並且在我知道的情況下(並且沒有移植到2.x
)出現在Python 3.5中。具體地,在部分缺點,下面指出:Star *運算符左側和右側的賦值語句
雖然
*elements, = iterable
原因elements
是一個list
,elements = *iterable
,導致elements
是一個tuple
。造成這種情況的原因可能會使不熟悉該構造的人感到困惑。
這確實成立,爲iterable = [1, 2, 3, 4]
,第一種情況下產生一個list
:
>>> *elements, = iterable
>>> elements
[1, 2, 3, 4]
雖然創建tuple
第二種情況:
>>> elements = *iterable,
>>> elements
(1, 2, 3, 4)
作爲陌生的概念, 我很困惑。誰能解釋這種行爲?根據所在的一面,星號表達的行爲是否有所不同?