On 9/26/07, Guido van Rossum <[EMAIL PROTECTED]> wrote: > ... > Indexing > -------- > > **Open Issue:** I'm undecided on whether indexing bytes and buffer > objects should return small ints (like the bytes type in 3.0a1, and > like lists or array.array('B')), or bytes/buffer objects of length 1 > (like the str type). The latter (str-like) approach will ease porting > code from Python 2.x; but it makes it harder to extract values from a > bytes array.
Marcin was far more eloquent than I could hope to be, but I too prefer indexing bytes to return a small int. My reasoning is a little more academic: All iterable types except for str get simpler when you iterate over them, so eventually you come to a type that isn't iterable. It would be a shame to extend this misbehavior to bytes if we have a chance to remove it. For example, the recursive flatten() function gets more complicated for each type that does this: >>> list(flatten.flatten([1, [2, [3, [4, 5]]]])) [1, 2, 3, 4, 5] >>> list(flatten.flatten([1, [2, [3, ["str", 5]]]])) [1, 2, 3, 's', 't', 'r', 5] If all iterables iterated over a simpler type, we could use: def flatten(iterable): try: for elem in iterable: for elem in flatten(elem): yield elem except TypeError: # Not iterable yield iterable but with strings, you need def flatten(iterable): try: for elem in iterable: if isinstance(elem, str) and len(elem) == 1: yield elem else: for elem in flatten(elem): yield elem except TypeError: # Not iterable yield iterable and another special case for each similar type. Comparisons with literal bytes could be done with: for b in bb: if b == b'x'[0]: ... or perhaps if b == int(b'x'): ... but you're right that's not ideal. -- Namasté, Jeffrey Yasskin _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com