SQLAlchemy 是一个很好的例子。对于新手来说,SQLAlchemy 是一个 ORM,使用 Python 表达式生成 SQL 语句。在诸如
之类的表达中meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
model.Theme.id == model.VoteWarn.post_id
不返回布尔值,而是最终生成像WHERE theme.id = vote.post_id
这样的SQL查询的对象。逆运算会产生类似 WHERE theme.id <> vote.post_id
的结果,因此这两种方法都需要定义。
有些库做了一些奇特的事情,并且不会从这些操作中返回布尔值。例如,使用 numpy:
>>> import numpy as np
>>> np.array([1,2,5,4,3,4,5,4,4])==4
array([False, False, False, True, False, True, False, True, True], dtype=bool)
>>> np.array([1,2,5,4,3,4,5,4,4])!=4
array([ True, True, True, False, True, False, True, False, False], dtype=bool)
当您将数组与单个值或另一个数组进行比较时,您会返回一个布尔数组,其中包含比较相应元素的结果。如果
x!=y
简单地等同于 not (x==y)
,则无法执行此操作。
更一般地,在多值逻辑系统中,“等于”和“不等于”不一定彼此精确相反。
最明显的例子是 SQL,其中
True == True
、False == False
和 Null != Null
。虽然我不知道是否有任何具体的Python示例,但我可以想象它在某些地方被实现。