【问题标题】:Python: Indexing bytes array returns an integerPython:索引字节数组返回一个整数
【发布时间】:2015-05-31 16:33:21
【问题描述】:

以下是 Python 3.3 中的示例交互

>>> bArray = bytes(b'ABCDE')
>>> bArray
b'ABCDE'
>>> bArray[0]
65
>>> type(bArray[0])
<class 'int'>
>>> bArray[0:1]
b'A'
>>> type(bArray[0:1])
<class 'bytes'>
>>> struct.pack('B', bArray[1])
b'B'
>>> type(struct.pack('B', bArray[1]))
<class 'bytes'>

它表明索引字节数组会产生一个整数,而切片则返回一个字节对象。

  1. 谁能解释一下为什么会这样?索引不应该也返回一个字节对象吗?
  2. 如果保证应用程序使用数字 [0,255],使用字节是否比使用纯整数更有效?

【问题讨论】:

    标签: python-3.x


    【解决方案1】:
    1. 引用the manual

    警告虽然字符串对象是字符序列(由长度为 1 的字符串表示),但字节和字节数组对象是整数序列(介于 0 和 255 之间),表示单个字节的 ASCII 值。这意味着对于一个字节或字节数组对象 b,b[0] 将是一个整数,而 b[0:1] 将是一个长度为 1 的字节或字节数组对象。字节对象的表示使用文字格式(b' ...') 因为它通常比例如更有用字节([50, 19, 100])。您始终可以使用 list(b) 将字节对象转换为整数列表。

    所以不再有“字节”对象了。

    1. 我能找到的唯一解释是字节序列的内存效率更高,而计算效率更低 - 因为所有操作都需要转换为整数(甚至是内部)

    【讨论】:

    • 与整数列表 (0-255) 相比,字节(字节序列)可能是可散列的?再说一次,整数元组 (0-255) 应该是可散列的。
    • 顺便说一句,我同意这令人困惑。我也希望单个索引产生一个相同类型的数组项,而不是整数....叹息!!
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2016-07-10
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多