【问题标题】:Python bitwise vs boolean operators [duplicate]Python按位与布尔运算符[重复]
【发布时间】:2017-08-19 13:21:24
【问题描述】:

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

与因子一样,过滤器可以组合使用。组合过滤器是使用 & (and) 和 | (or) 运算符。

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

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

【问题讨论】:

  • 那么教程为什么会推荐它?
  • 如果他们在 条件表达式 中向您推荐位运算符而不是普通的布尔运算符,那么这就是个问题。
  • 它没有。这实际上意味着它认为它们是布尔运算符。 Like factors, filters can be combined. Combining filters is done using the & (and) and | (or) operators.
  • “用于组合布尔表达式”:这是有条件的。
  • @Luke Python 表达式没有类型,所以没有像“布尔表达式”这样的东西。最有可能的诸如“因素”和“过滤器”之类的东西不是布尔值,但如果没有更多上下文,我们无法确定。使用 > 等的表达式并不总是计算为布尔值。

标签: python bitwise-operators boolean-operations


【解决方案1】:

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

但是,在某些特定框架中,位运算符取代了布尔运算符,因为它们可以被挂钩。有__or____and__ 特殊方法可以让您控制|& 的返回值,但是对于布尔运算符没有这样的钩子(因为后者短路; 评估两个表达式以传递给钩子会破坏它)。

因此,如果本文讨论的是 numpy(或 numpy 派生的框架,如 Pandas 或 Scipy),或 ORM 框架,如 SQLAlchemy、Peewee 或 Django,那么有充分的理由使用位运算符。

【讨论】:

  • 我相信他们有自己的框架,紧密集成到平台中。您必须使用在线 IDE 进行开发,所以我怀疑这就是答案。我不知道那些钩子。谢谢!我会在有能力的时候接受你的回答!
  • 很好的答案,对于一个非常模糊的问题。我关闭为重复,也许你的答案可以合并到原来的,因为没有人像你一样解决这个问题。
  • 看起来他们正在使用熊猫quantopian.com/tutorials/getting-started#lesson5
  • @StefanPochmann 是的,这是 OP 引用的页面,但我想链接数据对象(以及它与熊猫系列或 DataFrame 的关系)。
猜你喜欢
  • 2017-02-27
  • 2011-04-20
  • 2017-01-11
  • 2011-09-11
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多