A不是B"与"A是(不是B)
我对“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
,然后再检查这两个对象是否是同一个对象(也就是 True
或 False
)。
举个例子:
False is not []
这个表达式显然是 True
,因为 False
和 []
显然是不同的对象。1
对比一下:
False is (not [])
这个表达式是 False
,因为 not []
计算结果是 True
,而 False
和 True
是不同的对象。
当然,这只是一个例子。如果你不明确使用 False
和 True
,那么找到例子会更简单,因为第二个表达式会 总是 是 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