kha*_*hik 1 python identity equals
is在Python中检查空字符串是否正确?它进行身份检查,同时==测试相等性.
考虑以下(使用的想法join是从这个答案借来的):
>>> ne1 = "aaa"
>>> ne2 = "".join('a' for _ in range(3))
>>> ne1 == ne2
True
>>> ne1 is ne2
False
>>>
Run Code Online (Sandbox Code Playgroud)
所以这里的is工作可以预期.现在来看看这段代码:
>>> e1 = ""
>>> e2 = "aaa".replace("a", "")
>>> e3 = "" * 2
>>> e4 = "bbb".join(range(0))
>>> e1, e2, e3, e4
('', '', '', '')
>>> e1 is e2
True
>>> e1 is e3
True
>>> e1 is e4
True
>>> id(e1), id(e2), id(e3), id(e4)
(35963168, 35963168, 35963168, 35963168) # why?
Run Code Online (Sandbox Code Playgroud)
mgi*_*son 15
检查空字符串的正确方法是:
if yourstring:
print "string is not empty"
Run Code Online (Sandbox Code Playgroud)
例如,bool(yourstring)将是False,如果你的字符串是空的.您的示例工作的原因是因为CPython缓存某些字符串和整数并重用它们以提高效率.这是一个实现细节,不应该依赖.
Python实现可以选择实习小字符串(好吧,它可以选择实际上实现任何不可变的); Cpython这样做了.
你永远不应该依赖这种行为.如果要检查字符串是否为空字符串,请始终使用mystring == "".
如果你确定你正在检查的对象始终是一个字符串,也可以评价它在布尔上下文(例如if mystring:),但请记住,这将不会从区分空字符串0,False或None.
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |