Python bitwise vs boolean operators

时间:2017-08-19 13:21:24

标签: python bitwise-operators boolean-operations

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

  

类似因素,可以组合过滤器。使用完成组合过滤器   &(和)和|(或)运算符。

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

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

1 个答案:

答案 0 :(得分:5)

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

但是,在某些特定框架中,按位运算符会替换布尔运算符,因为它们可以挂钩。有__or____and__ specal方法可以让你控制|&的返回值,但布尔运算符没有这样的钩子(因为后者< em>短路;评估两个表达式以传递给一个钩子会失败那个)。

因此,如果文章讨论numpy(或者像Nandy派生的框架,如Pandas或Scipy),或者像SQLAlchemy,Peewee或Django这样的ORM框架,那么就有充分的理由使用按位运算符。