奇怪的是:
>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
似乎a is b或多或少被定义为id(a) == id(b).以这种方式制作错误很容易:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
Run Code Online (Sandbox Code Playgroud)
一些fnames意外地在else块中结束了.修复很简单,我们应该使用ext == '.mp3',但if ext is '.mp3'表面上看起来似乎是一种很好的pythonic方式来编写它,它比"正确"的方式更具可读性.
由于字符串是不可变的,为什么它是错误的技术细节是什么?什么时候身份检查更好,什么时候检查更好?