“A不是B”vs“A是(不是B)”

时间:2014-07-07 15:51:02

标签: python

我有点害怕"不是"操作员和"不是X"当"是(非X)"是有意的。确实存在一些表达式A和B,以便:

A is not B

不同
A is (not B)

附录即可。 使用此运算符是否被视为良好做法?是否应该首选not (A is B)

2 个答案:

答案 0 :(得分:9)

他们肯定是不同的。后一种情况首先在布尔上下文中计算not X,然后检查两个对象是否是同一个对象TrueFalse)。

考虑:

False is not []

这个表达式很简单True,因为False[]是非常明显不同的对象。 1

VS

False is (not [])

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

当然,这只是一个例子。如果您未明确使用FalseTrue,则会更容易找到示例,因为第二个表达式将始终False且第一个表达式将(几乎)总是True ...

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

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

答案 1 :(得分:5)

是:

A = 0
B = 1

尝试一下,你会非常害怕:

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