Pylint抱怨将字符串与文字与'is'进行比较

iFr*_*cht 8 python equality pylint python-3.x

请考虑以下代码段:

my_string = 'asdf'
print(my_string is 'xfje') #R0123
Run Code Online (Sandbox Code Playgroud)

Pylint R0123在第二行返回推荐,我在错误消息wiki上找不到.不过,在这部分文档中提到了它:

文字比较(R0123):

与文字的比较在将对象与文字进行比较时使用,这通常是您不想做的事情,因为您可以比较不同于预期的文字.

这个解释对我没有任何帮助.我知道is用于两个字符串对象之间的比较可能会导致与预期不同的结果,但是为了将对象与文字进行比较,它与之相同==.使用时==,错误消失.

我为什么不在is这里使用?

Mur*_*nik 16

is检查左手参数是否与右手参数保持完全相同的引用.这对于None单例是好的,但对于其他类型通常是个坏主意,其中多个实例可以具有相同的逻辑值.

考虑一下,例如以下示例:

>>> my_string = ''.join([c for c in 'xfje'])
>>> print my_string
xfje
>>> print my_string == 'xfje'
True
>>> print my_string is 'xfje'
False
Run Code Online (Sandbox Code Playgroud)