为了账号安全,请及时绑定邮箱和手机立即绑定

Python无比较:我应该使用“是”还是==?

Python无比较:我应该使用“是”还是==?

莫回无 2019-08-02 15:35:45
Python无比较:我应该使用“是”还是==?我使用的是Python 2.x.我比较时编辑警告我my_var == None,但使用时没有警告my_var is None。我在Python shell中做了一个测试,并确定两者都是有效的语法,但我的编辑器似乎说这my_var is None是首选。是这种情况,如果是这样,为什么?
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

摘要:

使用is时要核对对象的身份(如检查,看看是否var是None)。使用==时要检查的平等(例如是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检查对象标识。只有一个对象None,所以当你这样做时my_var is None,你要检查它们是否实际上是同一个对象(而不仅仅是等效的对象)


换句话说,==是检查等价(从对象到对象定义),而is检查对象标识:


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


查看完整回答
反对 回复 2019-08-02
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

is当将任意对象与单身对比时通常是优选的,None因为它更快且更可预测。is总是按对象标识进行比较,而==做什么取决于操作数的确切类型,甚至取决于它们的排序。

PEP 8支持这一建议,它明确指出 “与单身人士的比较,如”无“应该始终使用,is或者is not从不使用相等运算符。”


查看完整回答
反对 回复 2019-08-02
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

PEP 8定义了is在比较单例时最好使用运算符。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 516 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信