[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