为什么在索引字节时得到一个int?

时间:2015-01-31 08:10:11

标签: python python-3.x

我试图在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'

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:17)

bytes类型为Binary Sequence type,并明确记录为包含0到255范围内的整数序列。

来自文档:

  

字节对象是单字节的不可变序列。

     

[...]

     

虽然字节文字和表示基于ASCII文本,但字节对象实际上表现为不可变的整数序列,序列中的每个值都被限制为0 <= x < 256 [。]

     

[...]

     

由于字节对象是整数序列(类似于元组),对于字节对象b b[0]将是整数,而b[0:1]将是长度为1的bytes对象。(这与文本字符串形成对比,其中索引和切片将生成长度为1的字符串。)

大胆强调我的。注意,索引字符串在序列类型中有点异常; 'abc'[0]为您提供长度为1的str个对象; str是唯一包含其自身类型元素的序列类型。

这与其他语言如何处理字符串数据相呼应;在C中,unsigned char type实际上也是0-255范围内的整数。如果您使用非限定unsigned类型,并且文本被建模为char数组,则许多C编译器默认为char[]