为什么在索引字节时得到整数?

发布于 2021-01-29 18:07:46

我正在尝试获取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'

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

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    从文档中:

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

    […]

    尽管字节文字和表示形式均基于ASCII文本,但字节对象实际上的行为就像不可变的整数序列,该序列中的每个值都受到限制,使得0 <= x < 256[。]

    […]

    由于bytes对象是整数序列(类似于元组),因此对于bytes object bb[0]
    它将是integer
    ,而b[0:1]将是bytes长度为1的对象。(这与文本字符串形成对比,在文本字符串中,索引和切片都会产生一个字符串长度1)。

    大胆强调我的。注意,在序列类型中索引字符串不是一个例外。'abc'[0]给你一个str长度为1的物体;str是唯一始终包含其自身类型元素的序列类型。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看