Python 按位与布尔运算符

Python bitwise vs boolean operators

我正在阅读基于 Python 的交易平台的 tutorial,它建议使用按位 (~&|) 而不是布尔 (notandor) 运算符来组合布尔表达式。

Like factors, filters can be combined. Combining filters is done using the & (and) and | (or) operators.

这有充分的理由吗?我以前从未见过它。我不完全确定 Python 中布尔值的所有属性,但我相信在 C 和 C++ 中布尔值由整数 1 或 0 表示,并且可以这样操作。 Python 相似吗?我可以看到 &| 至少在那种情况下是如何工作的。

使用这些按位运算符而不是布尔运算符的目的是什么?是不是更快了?

按位运算符通常是非常错误的工具。按位运算符并不快(它们实际上必须做更多的工作),并且具有不同的优先级,因此与布尔运算符相比,它们绑定到更大表达式的不同部分。

但是,在一些特定的框架中,按位运算符取代了布尔运算符,因为它们可以被挂钩。有 __or__ and __and__ 特殊方法可以让您控制 |& 的 return 值,但是布尔运算符没有这样的钩子(因为后者 short-circuit; 评估两个表达式以传递给 hook 会打败它)。

因此,如果文章谈论的是 numpy(或 numpy 派生的框架,例如 Pandas 或 Scipy),或者像 SQLAlchemy、Peewee 或 Django 这样的 ORM 框架,那么有一个很好的使用按位运算符的原因。