這是在a recent PyCon talk。爲什麼分配給空列表而不是空元組是有效的?
聲明
[] = []
什麼都不做有意義的,但它並不要麼拋出異常。我覺得這一定是由於拆包規則。你可以做tuple unpacking與清單太,例如
[a, b] = [1, 2]
做你所期望的。作爲合乎邏輯的結果,當解包元素的數量爲0時,這也應該起作用,這可以解釋爲什麼分配給空列表是有效的。這一理論得到當您嘗試一個非空列表分配到一個空列表會發生什麼的進一步支持:
>>> [] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
我將很高興與這樣的解釋,如果同樣也將是真正的元組。如果我們可以用0個元素解壓縮到一個列表,我們也應該能夠用0個元素解壓到一個元組,不是?但是:
>>>() =()
File "<stdin>", line 1
SyntaxError: can't assign to()
看起來像拆包規則不適用於元組,因爲它們是列表。對於這種不一致,我想不出任何解釋。是否有這種行爲的原因?
@ozgur但元組拆包做工作:'A,B = 1,2'有效... –
我不知道,但我認爲'[] = []'不拆包。然而,當我看到這樣做是可行的時,我感到驚訝:'[a,b] = [1,2]'。相反,我會做'a,b =(1,2)' – ozgur
我覺得在這裏工作不會有什麼有趣的原理。最好的答案可能是這樣的:「這是代碼生成器的一部分,它檢查一個賦值的LHS的有效性,這裏是檢查'()'但是讓'[]'通過」的檢查。也許這是因爲'()'被識別爲一個常量或其他東西。 – user2357112