Python 2.7和PEP-358中的字节types
根据PEP 358 ,一个字节对象被用来存储一个可变的字节序列(0-255),如果不是这样的话就会产生。
但是,我的Python 2.7说不然
>>> bytes([1,2,3]) '[1, 2, 3]' >>> bytes([280]) '[280]' >>> bytes is str True >>> bytes <type 'str'>
有没有人知道PEP宣布Final的原因,但实施不符合?
bytes
types是在Python 3中引入的,但在PEP中讨论的是一个可变序列( bytes
是不可变的),它是在Python 2.6中以名称bytearray
引入的。
PEP显然没有像所述的那样执行(它确实说PEP 3137已经部分取代了PEP ),但是我认为这只是一个事情被重命名的问题,而不是function的缺失。 在Python中,2 bytes
只是str
的别名,以帮助向前兼容,所以这里是一个红鲱鱼。
示例bytearray用法:
>>> a = bytearray([1,2,3]) >>> a[0] = 5 >>> a bytearray(b'\x05\x02\x03')
新的bytes
types只有3.x。 内置的2.x bytes
只是str
types的别名。 在2.x中没有新的称为bytes
types; 只是str
一个新的别名和文字语法。
这里是大家喜欢的文档片段 :
Python 2.6将
bytes
添加为str
types的同义词,并且还支持b''
表示法。2.6的
str
与3.0的字节types不同, 最值得注意的是,构造函数是完全不同的。 在3.0中,bytes([65, 66, 67])
是3个元素,包含表示ABC
的字节; 在2.6中,bytes([65, 66, 67])
返回表示列表的str()
的12字节string。2.6中
bytes
的主要用途是编写诸如isinstance(x, bytes)
类的对象types的testing。 这将有助于2to3
转换器,它不能告诉2.x代码意图string包含字符或8位字节; 您现在可以使用bytes
或str
来精确地表示您的意图,而Python 3.0中的结果代码也将是正确的。
bytes
对象只在Python 3.x中存在。 bytes
是Python 2.7中str的别名。 它的存在有助于在Python 2和Python 3之间编写可移植的代码。