【发布时间】:2018-12-28 09:45:33
【问题描述】:
我发现了
a == b is not None
比较a == b,如果为真,则执行b is not None。
(a == b) is not None
和
a == (b is not None)
在哪里可以找到有关此类行为的更多信息?
这很简单,但我希望True is not None 被执行
【问题讨论】:
我发现了
a == b is not None
比较a == b,如果为真,则执行b is not None。
(a == b) is not None
和
a == (b is not None)
在哪里可以找到有关此类行为的更多信息?
这很简单,但我希望True is not None 被执行
【问题讨论】:
这在语言参考中记录,6.10. Comparisons:
与 C 不同,Python 中的所有比较操作都具有相同的优先级,低于任何算术、移位或按位操作。同样与 C 不同的是,像
a < b < c这样的表达式具有数学中的常规解释:comparison ::= or_expr (comp_operator or_expr)* comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"比较产生布尔值:
True或False。比较可以任意链接,例如,
x < y <= z等价于x < y and y <= z,除了y仅被评估一次(但在这两种情况下,z在发现x < y时根本不会被评估是假的)。形式上,如果 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,只是每个表达式最多计算一次。请注意,
a op1 b op2 c并不意味着在a和c之间进行任何类型的比较,因此,例如,x < y > z是完全合法的(尽管可能不漂亮)。
== 和 is not 都是比较运算符,因此它们如上所述进行链接。
【讨论】: