"Byte" type?

John Nagle nagle at animats.com
Sun Feb 15 11:57:12 EST 2009


Benjamin Peterson wrote:
> Steve Holden <steve <at> holdenweb.com> writes:
>> Beware, also, that in 2.6 the "bytes" type is essentially an ugly hack
>> to enable easier forward compatibility with the 3.X series ...
> 
> It's not an ugly hack. It just isn't all that you might hope it'd live up to be.

    The semantics aren't what the naive user would expect.  One would
expect an element of a bytearray to be a small integer.  But instead,
it has string-like behavior.  "+" means concatenate, not add.
The bit operators don't work at all.

Python 2.6.1 ...
 >>> a = b'A'
 >>> b = b'B'
 >>> a+b
'AB'
 >>> a[0]+b[0]
'AB'
 >>>>>> a = b'A'
 >>> b = b'B'
 >>> a+b
'AB'
 >>> a[0]+b[0]
'AB'
 >>>
 >>> a & b
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'str' and 'str'

    Given that the intent of bytearray is that it's a data type for
handling raw binary data of unknown format, one might expect it to behave like
"array.array('B')", which is an array of unsigned bytes that are
treated as integers.  But that's not how "bytearray" works.  "bytearray"
is more like the old meaning of "str", before Unicode support, circa Python 2.1.

    I sort of understand the mindset, but the documentation needs to be improved.
Right now, we have a few PEPs and the 2.6 "New features" article, but
no comprehensive documentation.  The relationship between "str", "unicode",
"bytearray", "array.array('B')", and integers, and how this changes from
version to version of Python, needs to be made clearer, or conversion
to 2.6/3.0 will not happen rapidly.

				John Nagle



More information about the Python-list mailing list