首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘`var是None`’vs‘`var == None`’

‘`var是None`’vs‘`var == None`’
EN

Software Engineering用户
提问于 2016-06-10 14:02:30
回答 3查看 13K关注 0票数 15

为什么人们更喜欢var is None而不是var == None,因为is只能在少数对象上使用?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2016-06-16 03:42:55

权威的理由是“因为佩普-8这么说”:

应该始终用isis not来比较像None这样的单例,而不应该使用相等的运算符。

注意:这不仅仅是“更好的实践”,因为平等和身份是不同的语义结构。

python中,测试隐式“真实性”通常比显式值更可取。

选择

代码语言:javascript
复制
if somevar:
    ...

结束

代码语言:javascript
复制
if somevar is True:
    ...

结束

代码语言:javascript
复制
if somevar == True:
    ...

优势

  • 强调将同一性与内建物相比较的明确愿望
  • 无法通过对任意对象定义__eq__来中断比较
票数 24
EN

Software Engineering用户

发布于 2016-07-13 15:51:56

实际上,这与编程风格无关,is==有很大的不同:

is操作符检查两个项是否引用同一个对象

==操作符检查两个项引用的对象是否相同。

例如:

代码语言:javascript
复制
l = [1,2,3,4,5,6,7,8,9,1,2,3,4,]
l2 = l         # make ir reference the object that l references
l3 = l[:]      # copy it so reference identicle objects

l is l2 # same objects
True

l == l2 # identical objects
True

l is l3 # same objects
False

l == l3 # identical object
True

当您将列表切片时,您正在复制它并创建另一个与其相同的对象;当您说l2 = l时,您正在创建一个引用相同对象的新变量

资料来源: Mark Lutz编写的“学习Python”第5版;第二部分:类型和操作,第6章:动态打字插页,第180至184页。

票数 1
EN

Software Engineering用户

发布于 2022-10-02 23:58:38

几乎每一种语言都要记住一件关键的事情:"==是愚蠢的“。它是“对‘相等’的文字二进制测试。”像is这样的操作符是专门设计来了解底层运行时类型系统的,包括继承之类的东西。虽然编译器可能接受==的使用,但在此设置中使用它并不是正确的运算符。

票数 -3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/321861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档