[Python-ideas] A way to subscript a single integer from bytes

Antoine Pitrou solipsis at pitrou.net
Tue May 1 07:30:55 EDT 2018


Hi Ken,

On Tue, 1 May 2018 19:22:52 +0800
Ken Hilton <kenlhilton at gmail.com> wrote:
> 
> So I'm pretty sure everyone here is familiar with how the "bytes" object
> works in Python 3. It acts mostly like a string, with the exception that
> 0-dimensional subscripting (var[idx]) returns an integer, not a bytes
> object - the integer being the ordinal number of the corresponding
> character.
> However, 1-dimensional subscripting (var[idx1:idx2]) returns a bytes
> object. Example:
> 
>     >>> a = b'hovercraft'
>     >>> a[0]  
>     104
>     >>> a[4:8]  
>     b'rcra'
> 
> Though this isn't exactly unexpected behavior (it's not possible to
> accidentally do 1-dimensional subscripting and expect an integer it's a
> different syntax), it's still a shame that it isn't possible to quickly and
> easily subscript an integer out of it. Following up from the previous
> example, The only way to get 493182234161465432041076 out of b'hovercraft'
> in a single expression is as follows:
> 
>     list(__import__('itertools').accumulate((i for i in a), lambda x, y: (x
> << 8) + y))[-1]

Let's see:

>>> a = b'hovercraft'
>>> int.from_bytes(a, 'big')
493182234161465432041076

Regards

Antoine.




More information about the Python-ideas mailing list