[Python-Dev] Byte literals (was Re: [Python-checkins] Changing string constants to byte arrays ( r55119 - in python/branches/py3k-struni/Lib: codecs.py test/test_codecs.py ))
jcarlson at uci.edu
Sat May 5 21:52:27 CEST 2007
"Fred L. Drake, Jr." <fdrake at acm.org> wrote:
> On Saturday 05 May 2007, Aahz wrote:
> > I'm with MAL and Fred on making literals immutable -- that's safe and
> > lots of newbies will need to use byte literals early in their Python
> > experience if they pick up Python to operate on network data.
> Yes; there are lots of places where bytes literals will be used the way str
> literals are today. buffer(b'...') might be good enough, but it seems more
> than a little idiomatic, and doesn't seem particularly readable.
> I'm not suggesting that /all/ literals result in constants, but bytes literals
> seem like a case where what's wanted is the value. If b'...' results in a
> new object on every reference, that's a lot of overhead for a network
> protocol implementation, where the data is just going to be written to a
> socket or concatenated with other data. An immutable bytes type would be
> very useful as a dictionary key as well, and more space-efficient than
I was saying the exact same thing last summer. See my discussion with
Martin about parsing/unmarshaling. What I expect will happen with bytes
as dictionary keys is that people will end up subclassing dictionaries
(with varying amounts of success and correctness) to do something like
def __setitem__(self, key, value):
if isinstance(key, bytes):
key = key.decode('latin-1')
raise KeyError("only bytes can be used as keys")
dict.__setitem__(self, key, value)
Is it optimal? No. Would it be nice to have immtable bytes? Yes. Do
I think it will really be a problem in parsing/unmarshaling? I don't
know, but the fact that there now exists a reasonable literal syntax b'...'
rather than the previous bytes([1, 2, 3, ...]) means that we are coming
much closer to having what really is about the best way to handle this;
Python 2.x str.
More information about the Python-Dev