我剛剛花了一天的時間找到由於賦值語句末尾的逗號造成的錯誤。找到我的bug的困難被第三方回調庫加劇了,它捕獲異常,但它讓我想知道爲什麼Python(2.x)不會引發語法錯誤而不是創建元組。考慮以下內容Python竅門:簡單分配結束時的流浪逗號
>>> a = 1,
>>> a
(1,)
正如您所看到的,尾隨逗號會創建一個單例元組。這並不違反Python語法(請參閱http://docs.python.org/reference/expressions.html#grammar-token-expression_list),但它肯定會導致一些意想不到的結果,例如
>>> a == 1,
(False,)
VS
>>> (1,) == a
True
雖然我現在明白這是怎麼回事,我很疑惑,爲什麼Python的允許這種語法,而不需要明確的括號來創建一個元組。 有沒有這種行爲是必要的,或者至少是有利的?過去7年來,我一直使用Python進行編程,我從來不需要用這種方式創建單例。在大多數方面,Python是一種非常可讀和明確的語言。這個特殊的「特徵」好像是非pythonic。
不知道最後一句話......「顯式比隱式更好。」 – 2012-07-23 22:10:54
我建議與語言維護人員取得聯繫,但這裏並不是這個問題可能引發的討論的好地方。簡短的答案是「這是如何實現的」,對於更長的解釋,你應該看看文檔或郵件列表,而不是SO。 – 2012-07-23 22:12:57
@ IgnacioVazquez-Abrams,明確說要創建一個元組意味着在其周圍放置括號,對吧? – 2012-07-23 22:15:39