[Python-3000] PEP 3137: Immutable Bytes and Mutable Buffer (original) (raw)

Larry Hastings larry at hastings.org
Fri Sep 28 03:32:29 CEST 2007


Guido van Rossum wrote:

I think I've been convinced that b[0] should return an int in range(256).

This made me feel funny. I stared at this for a while: b'a' != b'abcde'[0] ?!? b'a'[0] != b'a' ?!?

Then I realized that making b[0] return an int simply makes bytes objects behave less like strings, and more like tuples of integers: ( 97, ) != ( 97, 98, 99, 100, 101 ) ( 97, )[0] != ( 97, ) Strings have always been the odd man out; no other sequence type has this individual-elements-are-implicitly-sequences-too behavior.

So now bytes are straddling the difference between strings and the other mapping types:

tuple: to construct one with multiple elements: ( 97, 98, 99, 100, 101 ) elements aren't implicitly sequences: ( 97, ) != ( 97, 98, 99 )[0] list: to construct one with multiple elements: [ 97, 98, 99, 100, 101 ] elements aren't implicitly sequences: [ 97, ] != [ 97, 98, 99 ][0] bytes: to construct one with multiple elements: b"abcde" elements aren't implicitly sequences: b"a" != b"abcde"[0] str: to construct one with multiple elements: "abcde" elements are implicity sequences: "a" == "abcde"[0]

So what should the bytes constructor take? We all already know it should not take a string. (You must explicitly decode a string to get a bytes object.) Clearly it should take an int in the proper range: bytes(97) == b'a' and a bytes object: bytes(b'a') == b'a' bytes(b'abcde') == b'abcde' Like the tuple and list constructors, I think it should also attempt to cast iterables into its type. So if you pass in an iterable, and the iterable contains nothing but ints in the proper range, it should produce a bytes object: bytes( [ 97, 98, 99, 100, 101] ) == b'abcde'

Sorry if this is obvious to everybody; thinking through it helped me, at least.

/larry/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/python-3000/attachments/20070927/050eed54/attachment.htm



More information about the Python-3000 mailing list