Python的字节对象是否也称为字符串?

时间:2011-08-11 20:31:04

标签: python string

这是Dive Into Python 3关于字符串的部分:

  

在Python 3中,所有字符串都是Unicode字符序列。没有用utf-8编码的Python字符串或编码为CP-1252的Python字符串。 “这个字符串是utf-8吗?”是一个无效的问题。 utf-8是一种将字符编码为字节序列的方法。如果你想获取一个字符串并将其转换为特定字符编码中的字节序列,Python 3可以帮助你。如果你想获取一个字节序列并将其转换为字符串,Python 3也可以帮助你。字节不是字符;字节是字节。角色是一种抽象。字符串是这些抽象的序列。

今天早些时候,我使用了hashlib模块并阅读了md5的帮助文字,其中写道:

  

返回一个新的MD5哈希对象;可选地用字符串初始化。

嗯,它不接受string - 它接受bytes个对象。

也许我在阅读过多内容,但是如果帮助文本说明应该使用bytes而不是更有意义吗?或者人们使用相同的名称作为字符串和字节?

2 个答案:

答案 0 :(得分:6)

在Python 2和3中,str既用于字符串也用于字节。事实上,在Python 2.6之前,甚至没有bytes类型(以及2.6和2.7,bytes is str)。

hashlib文档中提到的不一致是这段历史的工件。

答案 1 :(得分:5)

可能是Python2遗留下来的帮助。

这是从2到3的更大变化之一

    Python2          Python3

    str              bytes
    unicode          str

Python2.6 +开始为bytes str

的同义词做好准备

你应该向开发者报告(除非它已经修复 - 我这里只有3.1.2)。我认为应该改进措辞