为什么在索引字节时得到整数?
我正在尝试获取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'
。
我发现我可以得到我期望的价值,但是对我来说,这就像是一个hack。
>>> my_bytes[0:1]
b'j'
有人可以解释为什么会这样吗?
-
该
bytes
类型是Binary
Sequence类型,并且明确记录为包含0到255范围内的整数序列。从文档中:
字节对象是单个字节的不可变序列。
[…]
尽管字节文字和表示形式均基于ASCII文本,但字节对象实际上的行为就像不可变的整数序列,该序列中的每个值都受到限制,使得
0 <= x < 256
[。][…]
由于bytes对象是整数序列(类似于元组),因此对于bytes object
b
,b[0]
它将是integer,而b[0:1]
将是bytes
长度为1的对象。(这与文本字符串形成对比,在文本字符串中,索引和切片都会产生一个字符串长度1)。大胆强调我的。注意,在序列类型中索引字符串不是一个例外。
'abc'[0]
给你一个str
长度为1的物体;str
是唯一始终包含其自身类型元素的序列类型。这与其他语言如何处理字符串数据相呼应。在C语言中,
unsigned char
类型实际上也是0-255范围内的整数。unsigned
如果您使用非限定char
类型,则许多C编译器默认为,并且文本被建模为char[]
数组。