3 ms·
Thank you. This is good to know. I was rather frustrated to find binary data handling being changed with no easy translation in Python 3. Here is another annoy
by tungwaiyip 13y ago
Thank you. This is good to know. I was rather frustrated to find binary data handling being changed with no easy translation in Python 3.
Here is another annoyance:
In [207]: 'abc'[0] + 'def'
Out[207]: 'adef'
In [208]: b'abc'[0] + b'def'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-208-458c625ec231> in <module>()
----> 1 b'abc'[0] + b'def'
TypeError: unsupported operand type(s) for +: 'int' and 'bytes'
- maxerickson 13y agoI don't have enough experience with either version to debate the merits of the choice, but the way forward with python 3 is to think of bytes objects as more like special lists of ints, where if you want a slice (instead of a single element) you have to ask for it: >>> [1,2,3][0] 1 >>> [1,2,3][0:1] [1] >>> b'abc'[0] 97 >>> b'abc'[0:1] b'a' >>> So the construction you want is just: >>> b'abc'[0:1]+b'def' b'adef' Which is obviously worse if you are doing it a bunch of times, but it is at least coherent with the view that bytes are just collections of ints (and there are situations where indexing operations returning an int is going to be more useful).
- tungwaiyip 13y agoIn Java, String and Char are two separate types. In Python, there is no separate char type. It is simply a string of length of 1. I do not have great theory to show which design is better either. I can only say the Python design work great for me in the past (for both text and binary string), and I suspect it is the more user friendly design of the two. So in Python 3 the design of binary string is changed. Unlike the old string, bytes and binary string of length 1 are not the same. Working codes are broken, practice have to be changed, often it involves more complicated code (like [0] becomes [0:1]). All these happens with no apparent benefit other than it is more "coherent" in the eye of some people. This is the frustration I see after using Python 3 for some time.