Python:Indexing bytes数组返回一个整数

时间:2015-03-27 11:00:22

标签: python-3.x

以下是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'>

它表明索引一个bytes数组产生一个整数,而切片相同则返回一个bytes对象。

  1. 任何人都可以解释一下为什么会这样?不应该索引,返回一个字节对象吗?
  2. 使用普通整数使用字节更多的内存/性能效率,只要应用程序保证使用数字[0,255]?

1 个答案:

答案 0 :(得分:5)

  1. 来自the manual
  2. 的引用
      

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

    所以没有“字节”对象了。

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