ste*_*fen 19 python python-2.x python-3.x
在Python3中,此表达式的计算结果如下False:
b"" == ""
Run Code Online (Sandbox Code Playgroud)
而在Python2中,这种比较是True:
u"" == ""
Run Code Online (Sandbox Code Playgroud)
is在两种情况下,检查身份都明显失败.
但是为什么他们会在Python3中实现这样的行为呢?
oxy*_*r0n 18
在Python 2.x中,unicode的设计目标是通过在两种类型之间隐式转换来启用unicode和字节字符串之间的透明操作.进行比较时u"" == "",首先将unicodeLHS自动编码为字节串,然后与strRHS 进行比较.这就是它返回的原因True.
相比之下,从Python 2中的unicode混乱中学习的Python 3.x决定将unicode与字节字符串的所有内容都显式化.因此,b"" == ""是False因为字节字符串不再自动转换为unicode进行比较.
Kas*_*mvd 15
在python 3中,字符串是Unicode.用于保存文本str的类型是用于保存数据的类型bytes.
在
str和字节类型不能混用,你总是必须明确他们之间的转换.用于str.encode()从str到字节,bytes.decode()从bytes到str.
因此,如果你这样做,b"".decode() == ""你会得到True:
>>> b"".decode() == ""
True
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读文本.数据而不是Unicode Vs. 8 BI
| 归档时间: |
|
| 查看次数: |
12087 次 |
| 最近记录: |