只是遇到这个问题,让我感到困惑!我的代码只是想比较song[-3:] is "mp3"
,如果我不使用is
,可以通过,但是由于我对理解问题的耐心,我发现了一种特殊的行为。我了解到is
应该进行测试以查看两件事是相同的实例还是其他事物,但是当值相同时,为什么,为什么会失败呢?当我使用is
运算符在一行,另一行上测试两个字符串的id时,然后是该==
运算符:
>>> id("String"[-3:]), id("String"[-3:])
(4347723880, 4347723880)
>>> id("String"[-3:])
4347241952
>>> "String"[-3:] is "String"[-3:]
False
>>> "String"[-3:] == "String"[-3:]
True
所以我想我的问题是,当我使用is
或在单独的行中进行测试时,为什么id会更改,而在同一行中却不会更改?这是一个奇怪的例外,还是我的疏忽?
is
测试它们是否是相同的字符串,而不仅仅是相同的字符串。由于字符串是不可变的,因此如果您要求使用相同的值,Python可以选择重用旧的字符串-您会遇到某些确实选择这样做的情况。如您所见,并非总是如此。不能保证什么时候使用的规则。为了在所有情况下都能获得正确的结果,请在str1 == str2
每次使用“使这些字符串都具有相同的字母”时使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句