[Python-Dev] Re: adding a bytes sequence type to Python
Bob Ippolito
bob at redivi.com
Tue Aug 17 23:59:19 CEST 2004
On Aug 17, 2004, at 5:33 PM, Guido van Rossum wrote:
>> So, how will it be different from:
>>
>> from array import array
>>
>> def bytes(*initializer):
>> return array('B',*initializer)
>>
>> Even if it's desirable for 'bytes' to be an actual type (e.g.
>> subclassing
>> ArrayType), it might help the definition process to describe the
>> difference
>> between the new type and a byte array.
>
> Not a whole lot different, except for the ability to use a string as
> alternate argument to the constructor, and the fact that it's going to
> be an actual type, and that it should support the buffer API (which
> array mysteriously doesn't?).
>
> The string argument support may not even be necessary -- an
> alternative way to spell that would be to let s.decode() return a
> bytes object, which has the advantage of being explicit about the
> encoding; there's even a base64 encoding already! But it would be a
> bigger incompatibility, more likely to break existing code using
> decode() and expecting to get a string.
IMHO current uses of decode and encode are really confusing. Many
decodes are from str -> unicode, and many encodes are from unicode ->
str (or str -> unicode -> str implicitly, which is usually going to
fail miserably)... while yet others like zlib, base64, etc. are str <->
str. Technically unicode.decode(base64) should certainly work, but it
doesn't because unicode doesn't have a decode method.
I don't have a proposed solution at the moment, but perhaps these
operations should either be outside of the data types altogether (i.e.
use codecs only) or there should be separate methods for doing separate
things (character translations versus data->data transformations).
-bob
More information about the Python-Dev
mailing list