我试图在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'
有人可以解释为什么会这样吗?
答案 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[]
。