A不是B"与"A是(不是B)

1 投票
2 回答
3771 浏览
提问于 2025-04-18 12:22

我对“is not”这个运算符有点担心,因为我怕“is not X”会被理解成“is (not X)”,而我其实想表达的是前者。有没有一些表达式A和B,使得:

A is not B

A is (not B)

是不同的呢?

补充说明。使用这个运算符算不算好习惯?难道不应该更倾向于使用not (A is B)吗?

2 个回答

10

这两者绝对是不同的。后者的情况是先在布尔上下文中计算 not X,然后再检查这两个对象是否是同一个对象(也就是 TrueFalse)。

举个例子:

False is not []

这个表达式显然是 True,因为 False[] 显然是不同的对象。1

对比一下:

False is (not [])

这个表达式是 False,因为 not [] 计算结果是 True,而 FalseTrue 是不同的对象。

当然,这只是一个例子。如果你不明确使用 FalseTrue,那么找到例子会更简单,因为第二个表达式会 总是False,而第一个表达式几乎总是 True……

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

1注意,is not 是一个单一运算符,和 not in 是同一种类型的。

7

是的:

A = 0
B = 1

试试看,你会真的吓一跳:

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

撰写回答