K D*_*awG 6 python unicode python-2.7
当比较python中的两个字符串时,它工作正常,当比较一个string对象与一个unicode对象时,它会按预期失败,但是当比较一个string对象与转换后的unicode (unicode --> str)对象时,它会失败
按预期工作:
>>> if 's' is 's': print "Hurrah!"
...
Hurrah!
Run Code Online (Sandbox Code Playgroud)
差不多是啊:
>>> if 's' is u's': print "Hurrah!"
...
Run Code Online (Sandbox Code Playgroud)
没想到:
>>> if 's' is str(u's'): print "Hurrah!"
...
Run Code Online (Sandbox Code Playgroud)
当两个类型属于同一类时,为什么第三个示例不能按预期工作?
>>> type('s')
<type 'str'>
>>> type(str(u's'))
<type 'str'>
Run Code Online (Sandbox Code Playgroud)
mgi*_*son 12
不要is用于此,请使用==.您正在比较对象是否具有相同的身份,而不是它们是否相等.当然,如果它们是相同的对象,它们将是相等的(==),但如果它们相等,则它们不一定是同一个对象.
第一个工作的事实是CPython 的实现细节.小字符串,因为它们是不可变的,可以由解释器实现.每次将字符串"s"放入源代码中时,Cpython都会重用相同的对象.但是,显然会str("s")返回一个具有相同值的新字符串.这并不奇怪.
你可能会问自己,"为什么要根据字符串实习's'?".这是一个合理的问题.毕竟,它是一个短小的字符串 - 在你的源代码中有多少内存可以有多个副本?答案(我认为)是因为字典查找.由于带有字符串作为键的dicts在python中非常常见,因此strcmp当指针比较返回false时,可以通过执行快速指针比较(回落速度较慢)来加快键的哈希函数/等式检查.
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |