【问题标题】:"A is not B" vs "A is (not B)"“A 不是 B”与“A 是(不是 B)”
【发布时间】:2014-07-07 15:51:01
【问题描述】:

我有点害怕“不是”运算符,并且当“是(不是 X)”的意思时解释“不是 X”的可能性。确实存在一些表达式 A 和 B 使得:

A is not B

不同于

A is (not B)

?

附录。 使用此运算符是否被认为是一种好习惯? not (A is B) 不应该是首选吗?

【问题讨论】:

标签: python


【解决方案1】:

它们绝对不同。后一种情况首先在布尔上下文中评估not X,然后检查这两个对象是否是同一个对象TrueFalse)。

考虑:

False is not []

这个表达式很简单True 因为False[] 是完全不同的对象。 1

对比

False is (not [])

这个表达式是False,因为not [] 评估为TrueFalseTrue 是不同的对象。

当然,这只是一个例子。如果您不明确使用FalseTrue,则查找示例会变得更加容易,因为第二个表达式将始终False,而第一个表达式将(几乎)始终为@987654338 @...

3 is not 0   # True
3 is (not 0)   # False

1请注意,is not 是一个单一运算符,与 not in 相同。

【讨论】:

  • 在 Python 2.7 和 Python 3.3 中对我来说结果相同。使用False is not [] 来查看差异。
  • @Matthias -- 谢谢。我猜是清晨的脑雾。我总是对即使答案错误也能获得的赞成票数量感到惊讶:-)
【解决方案2】:

是的:

A = 0
B = 1

试试看,你会很害怕:

>>> A = 0
>>> B = 1
>>> A is not B
True
>>> A is (not B)
False

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2021-10-06
    • 2011-08-01
    • 1970-01-01
    • 2011-10-20
    • 2021-09-10
    相关资源
    最近更新 更多