Python bitwise与布尔运算符

Luk*_*uke -2 python bitwise-operators boolean-operations

我读通过教程的一个基于Python的交易平台,它是推荐使用按位的(~,&,|),而不是布尔(not,and,or)运营商合并布尔表达式.

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

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

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

Mar*_*ers 5

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

但是,在某些特定的框架中,按位运算符会替换布尔运算符,因为它们可以被挂钩.有__or____and__允许您控制为返回值specal方法|&,但也有对布尔运算符没有这样的挂钩(如后者短路 ;评估两个表达式传递给一个钩子会打败).

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