Python无比较:我应该使用“is”还是==?
可能重复:
什么时候“==”操作符不等于“is”操作符? (python)
我正在使用Python 2.x.
当我比较my_var == None
,我的编辑器给我一个“警告”下划线,但是当我使用my_var is None
时没有警告my_var is None
。
我在Python shell中做了一个testing,并确定这两个语法都是有效的,但是我的编辑器似乎是说my_var is None
是首选的。
是这样,如果是这样,为什么?
概要:
使用is
当你想检查对象的身份 (例如检查var
是否)。 当你想检查相等 (如var
等于3
?)时使用==
。
说明:
你可以有自定义类,其中my_var == None
将返回True
例如:
class Negator(object): def __eq__(self,other): return not other thing = Negator() print thing == None #True print thing is None #False
is
检查对象身份 。 只有1个对象None
,所以当你做my_var is None
,你检查他们是否实际上是相同的对象(不只是等价的对象)
换句话说, ==
是等价的检查(从对象到对象定义),而检查对象的身份:
lst = [1,2,3] lst == lst[:] # This is True since the lists are "equivalent" lst is lst[:] # This is False since they're actually different objects
通常比较任意对象与单例如None
因为它更快,更可预测。 总是通过对象身份进行比较,而==
会做什么取决于操作数的确切types,甚至取决于它们的sorting。
PEP 8支持这一build议, PEP 8 明确指出 :“比较像None这样的单身人士应该总是用” is
还是” is not
,而不是平等运算符。
PEP 8定义在比较单例时最好使用is运算符。