簡體   English   中英

字節數組是否與Python的Zen不矛盾?

[英]Does `bytearray` not contradict the Zen of Python?

PEP 3137引入bytearray作為一個可變的8位陣列型。 但是,不可變bytes類型的list可以實現相同的目標,盡管語法可能更笨拙,但實際上具有更好的 性能 這種新類型與PythonZen矛盾

應該有一種-最好只有一種-顯而易見的方法。

所以我的問題是:是否有任何文檔化主要優勢和設計考慮使用一個bytearraylistbytes

到目前為止,我尚未在PEP或文檔頁面中找到記錄的動機。 實際上,文檔將它們視為近似相等:

bytearray類型是一個可變的整數序列,范圍為0 <= x <256。它具有大多數可變序列的常用方法...

接着,

列表和字節數組對象支持允許對對象進行就地修改的其他操作。 其他可變序列類型(添加到語言中時)也應支持這些操作。

由於bytearray是靜態類型的(作為8位無符號整數),因此人們可能期望性能提高,但是如上所述,相反的情況可能是正確的。 同樣,與bytes list相比, bytearray不應該具有內存優勢。 我可以想象有必要使用itertools.chain樣式的可變類型,但這在任何地方都沒有提到,而且似乎也不是設計目標。

首先,一個list樣式的容器包含可以無縫地遍歷對象序列的對象序列(實際上是itertools.chain提供的東西)絕對很方便。 正如PEP 3137所提到的, 陣列模塊可能已經達到了這個目的,但是“遠非理想”。

作者希望“可變和不可變的字節類型”,這可能意味着設計目標對於可變(可能使用非連續內存進行快速插入和刪除)和不可變具有相同的接口。 (絕對連續內存)實現。 據我所知,這創建了一個混雜的序列類型,包括array.arraybytesbytearraystrunicodelisttuplegenerator 本質上,它們提供了靜態類型或隱藏類型,可變或不可變序列的接口,這些序列存儲在內存中或動態評估(生成器)。 其中大多數確實遵循了抽象基類基本原理,但我確實認為在被認為是Pythonic之前,還有更多的設計要做。

注意:我將打開此答案供編輯,希望人們可以提供一些見解或更正。

暫無
暫無

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

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