【发布时间】:2015-03-30 17:42:33
【问题描述】:
我试图在 python 3.4 中获取字节字符串的第一个字符,但是当我索引它时,我得到一个 int:
>>> my_bytes = b'just a byte string'
b'just a byte string'
>>> my_bytes[0]
106
>>> type(my_bytes[0])
<class 'int'>
这对我来说似乎不直观,因为我期望得到b'j'。
我发现我可以得到我期望的价值,但对我来说这就像一个黑客攻击。
>>> my_bytes[0:1]
b'j'
谁能解释一下为什么会这样?
【问题讨论】:
-
使用像
my_bytes[0:1]这样的范围真的帮助我编写了Python2/Python3 兼容的代码。我很想看到一个涵盖解决此问题的兼容代码的最佳实践的答案。例如:ord(my_bytes[0])在 Python2 中给出一个 int,而my_bytes[0]在 Python3 中给出一个 int。为了同时工作,我使用了ord(my_bytes[0:1]),这对于 Python3 来说真的很难看。 -
你的回答对我有帮助,我找不到使用字节的最佳方法并在访问索引时避免整数转换,谢谢。
-
我注意到由 bytearray 和 bytestring 组成的列表存在同样的现象。
type(list(b'abctest').pop(0))给<class 'int'>。type(list(bytearray(b'abctest')).pop(0))给<class 'int'>。type(bytearray(b'abctest').pop(0))给<class 'int'>.
标签: python python-3.x