【问题标题】:Chaining "is" operators链接“is”运算符
【发布时间】:2014-09-26 00:09:01
【问题描述】:

python 是否支持链接is 运算符,例如以下?

a = None
b = None
a is b is None

这会输出True,一些文档引用会很好。

【问题讨论】:

  • 您的问题到底是什么?请注意,如果您远离单例和内嵌整数,则比较同一性而不是相等性会得到不同的结果。
  • 看我的用例,和 1
  • 问题的答案 "Does python support chaining is operators" 正如你的测试所证明的那样,“是”,所以我想知道你还在做什么想知道。
  • @jonrsharpe 我想知道确切的语义。
  • @jonrsharpe 质疑乍一看似乎有效的行为是有效的,并从文档中寻求验证。否则,错误可能会蔓延并编写出糟糕的软件。所以 +1 的问题!

标签: python comparison operator-keyword comparison-operators


【解决方案1】:

是的。任何归类为比较的运算符都可以链接起来。来自language reference

形式上,如果 a, b, c, ..., y, z 是表达式和​​ op1, op2, ..., opN 是比较运算符,则a op1 b op2 c ... y opN z 等价 到a op1 b and b op2 c and ... y opN z,除了每个表达式是 最多评估一次。

比较运算符是<>==>=<=<>!= 的一个很少使用的同义词,已在 Python 3 中消失)、!=isis notinnot in

【讨论】:

  • 什么都没有,我一直想找到一个好的用例来链接in...
【解决方案2】:

是的。见comparison docs.

比较可以任意链接,例如,x

形式上,如果 a, b, c, ..., y, z 是表达式并且 op1, op2, ..., opN 是比较运算符,那么 a op1 b op2 c ... y opN z 是等价的 到 a op1 b 和 b op2 c 和 ... y opN z,除了每个表达式是 最多评估一次。

is 比较运算符的作用:

运算符是和不是对象身份测试:x 是 y 是真的 当且仅当 x 和 y 是同一个对象。 x is not y 产生 反真值。

【讨论】:

    【解决方案3】:

    Referencing the Python grammar documentation,由Python读取解析源文件(所以这是源码):

    comparison: expr (comp_op expr)*
    comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
    

    expr (comp_op expr)* 应该用简单的英语理解为“由比较运算符分隔的任意数量的表达式”,其中is 是其中之一。这意味着是的,您可以将任意数量的 is 比较链接在一起。

    为了证明比较是连锁的:

    >>> a = b = c = 'foo'
    >>> a is b
    True
    >>> a is b is c
    True
    >>> True is c
    False
    

    【讨论】:

      【解决方案4】:

      是的,is 是比较运算符,链接的正式描述在参考手册中。

      https://docs.python.org/2/reference/expressions.html#not-in

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多