【发布时间】:2011-09-28 01:28:20
【问题描述】:
奇怪的是:
>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
似乎a is b 或多或少被定义为id(a) == id(b)。这种方式很容易产生错误:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
一些 fname 意外地出现在 else 块中。修复很简单,我们应该改用ext == '.mp3',但从表面上看if ext is '.mp3' 似乎是一种不错的pythonic 方式来编写它,并且它比“正确”方式更具可读性。
既然字符串是不可变的,那么它为什么会出错的技术细节是什么?什么时候身份检查更好,什么时候平等检查更好?
【问题讨论】: