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的原因,但实施不符合?

bytestypes是在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只是strtypes的别名。 在2.x中没有新的称为bytestypes; 只是str一个新的别名和文字语法。

这里是大家喜欢的文档片段 :

Python 2.6将bytes添加为strtypes的同义词,并且还支持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位字节; 您现在可以使用bytesstr来精确地表示您的意图,而Python 3.0中的结果代码也将是正确的。

bytes对象只在Python 3.x中存在。 bytes是Python 2.7中str的别名。 它的存在有助于在Python 2和Python 3之间编写可移植的代码。