Python 2中的Bytearray表现不尽如人意

Nli*_*tis 1 python bytearray python-2.7

我正在使用python 2.7.3中的bytearray类型,并注意到这种奇怪的行为:

将整数参数传递给其构造函数会创建一个大小等于填充零字节的整数的bytearray:

>>> s = bytearray(15)
>>> s
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试创建一个由我手动设置字节的bytearray,构造函数似乎忽略/跳过我创建的一些字节:

>>> s = bytearray(b'\x34\x78\x98\xFF\xFF')
>>> s
bytearray(b'4x\x98\xff\xff')
Run Code Online (Sandbox Code Playgroud)

为什么会这样?这是一个错误吗?或者我错过了什么? python文档不是很有启发性.

unw*_*ind 10

没有什么奇怪的事情发生,所有的字节仍然存在.放松!:)

混淆源于表示稍微优化的事实:其值表示可打印字符的字节被打印为那些字符.这使得它们只输出输出中的一个字符而不是四个字符.

它正在做它所说的:

  • \x34是字符4,这就是缓冲区以' 4' 开头的原因
  • \x78是角色x,这就是为什么有一个' x'之后' 4'
  • \x98\xff\xff 都保持原样.

请注意len(s)打印5.

史诗图形表示:

    +---+---+------+------+------+
s = | 4 | x | \x98 | \xff | \xff |
    +---+---+------+------+------+
Run Code Online (Sandbox Code Playgroud)