在 Python 3 中,此表达式的计算结果为
False
:
b"" == ""
虽然在 Python 2 中这个比较是
True
:
u"" == ""
在这两种情况下,用
is
检查身份显然都失败了。
但是他们为什么要在 Python 3 中实现这样的行为?
在 Python 3 中,字符串是 Unicode。用于保存文本的类型是
str
,用于保存数据的类型是bytes
.
和str
类型不能混合,您必须始终在它们之间显式转换。使用bytes
从str.encode()
到str
,使用bytes
从字节到bytes.decode()
.str
因此,如果你这样做
b"".decode() == ""
,你会得到True
:
>>> b"".decode() == ""
True
有关更多信息,请阅读文本与。数据而不是 Unicode 与。 8-bi.
设计者决定在将字节与字符串进行比较时不采用强制编码,因此它属于 Python 3.x 的默认行为,即包含不同类型的比较失败。