当前位置: 首页 > 面试题库 >

“ a is a is a”的比较结果

寿浩言
2023-03-14
问题内容

A = 314

if A == A == A:
    print('True #1')

if A == A == 271:
    print('True #2')

lie = 0
if lie is lie is lie:
    print('no matter how white, how small,')
    print('how incorporating of a smidgeon')
    print('of truth there be in it.')

结果:

True #1
no matter how white, how small,
how incorporating of a smidgeon
of truth there be in it.

我知道在if语句中使用两个“ =”和“ is”是不正常的。但是我想知道Python解释器如何解释该if语句。

表达式是lie is lie is lie同时解释还是短路解释?


问题答案:

您遇到的事情称为 运算符链接

从比较文档:

可以任意链接比较,例如 x< y <= z与等效x < y and y <= z,不同之处在于y比较仅被评估一次(但是在两种情况下z,如果x < y发现错误,则根本不评估)。

强调我的。

因此,这意味着将lie is lie is lie被解释为(lie is lie) and (lie is lie),仅此而已。

更一般地,a op b op c op d ...被评估相同a op b and b op c and c op d ...等。根据python的语法规则解析表达式。特别是;

comparison    ::=  or_expr ( comp_operator or_expr )*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"


 类似资料:
  • 问题内容: 比较运算符的 “ Go编程语言规范”部分使我相信,仅包含可比较字段的结构应具有可比性: 如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。 这样,由于“ Student”结构中的所有字段都是可比较的,因此我希望编译以下代码: 但是,它无法使用以下消息进行编译: 无效的操作:alice> = carol(运算符> =未在结构上定义) 我

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 我想获得客户总购买的平均值并将其存储在@x中 然后我想存储供应商总采购的平均值,并将其存储在@Y中

  • 我有两个向量: 我试图使用比较它们。不幸的是,给出了一个意想不到的结果。 虽然我希望: 那么,这是什么原因造成的呢?怎样才能达到预期的效果呢? 这个问题似乎与这样一个事实有关,即两个向量的最后一个元素与将更改为例如确实给出了预期的结果相同,并且还因为将设置为给出而不是。 编辑 换句话说,我希望丢失的元素(当长度不同时)作为零传递(只有似乎给出

  • 问题内容: 我试图比较2个1000字节的字符串,并想知道差异的确切位置,即;字符串与哪个字节不同。.是否有任何函数可以确定它? 问题答案: 我试图测试此处给出的答案,并且提出了另一个 更快 (通常情况下)的解决方案,尽管它不太优雅。 首先,让我们看看所提出的解决方案有多快: 如您所见,genexp比快很多,但这可能是由于它比查找第一个非等号字符要好得多。 现在,我们如何加快速度?好吧,我们可以使用

  • 问题内容: 当我比较具有相同下划线字符串的两个StringBuilder对象时,即使value应该为true也会返回。 问题答案: 这是因为不会覆盖类中的方法。 您将必须将两个对象都转换为,然后进行比较 这将为您提供正确的结果。显然,您必须注意 null 检查等。 根据合同,如果覆盖equals,则也必须覆盖它们,但是由于可变,因此其值的任何更改都会影响对象的哈希码。如果用作键,可能会导致存储的值