这是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
而不是更有意义吗?或者人们使用相同的名称作为字符串和字节?
答案 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)。我认为应该改进措辞