簡體   English   中英

為什么Python的元組沒有任何方法?

[英]Why does Python's tuple not have any method?

為什么 Python 的元組沒有任何關聯的方法? 例如tuple.append()tuple.remove()等?

如果我們訪問列表項時訪問元組的內容,那么為什么元組沒有與列表相關的方法?

tuple是不可變的,你不能改變它們的內容。

編輯- 正如對該問題的評論,我不確定我的回答是否清楚 - 有元組的方法,但沒有修改它們的方法。

元組是不可變的,而列表可以修改。 這本身就解釋了為什么元組沒有任何修改它們的方法,但暗示了另一個問題......為什么它們是不可變的? 不可變列表有什么用? 為什么不只有一個列表類型? 它歸結為幾個微妙的設計考慮......

在某種程度上,它提供了一種語義約定:一個tuple應該被視為一組 n 個對象的單個“配對”。 通常,這就像 SQL 數據庫中的一行......元組中元素的 position 通常具有隱含含義(id、名稱等),並且元組元素的類型可能大不相同(這個想法是通過在 2.6 中引入命名元組namedtuple進一步加強)。 這與list的正常用法不同,它通常包含可變數量的元素,所有元素都是相同的類型,並且 position 除了排序之外幾乎沒有關於元素的含義。 或者,它們可以被認為是列表的快照,很像frozensetset (並不是說這些都是以任何方式強制執行的——只是違背常規可能會導致您遇到嘗試修改元組等問題)。

所以這很好,但它有什么真正的好處? 一方面,由於元組是不可變的,它們一旦創建就不能更改。 這使您可以將它們用作字典中的鍵,而列表可能會更改其內容,因此無法散列。

這使它們更多地被視為對象的匿名配對,等於同一組對象的任何其他相同配對,而列表可能具有隱藏的行為……如果對列表的引用存儲在某處,則修改列表可能會改變顯示在 gui 中的名稱列表,或者你有什么。 因此,兩個列表可能具有相同的內容,但修改它們可能在整個程序中具有不同的行為。 而當你傳遞一個元組時,你知道它不可能從你下面修改出來......這個特殊的選擇已經確定了。 因此,您必須創建一個新元組,而不是修改一個元組。

我不認為我捕獲了所有用例,如果您還沒有完全了解預期的用例,請不要擔心......這兩個類的意圖差異很微妙,但很強大,它在點擊之前可能需要一些時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM