【问题标题】:operator precedence of floor division and division楼层划分和划分的运算符优先级
【发布时间】:2019-04-03 23:48:56
【问题描述】:

我很难理解为什么 python 会为这两个语句返回不同的结果:

-1 // 3/4-1 // 0.75

第一个返回-0.25,第二个返回-2

按照我的理解,/ 运算符在 // 之前执行,因此这两个语句应该具有相同的结果。

编辑: 我指的是我的大学提供的文件。我误解了这一点。官方 python 文档证明我错了。 感谢所有快速回答。

【问题讨论】:

  • 您从有关该主题的 Python 文档中有什么不明白的地方?请引用给您“我理解的方式”的来源。
  • 我指的是我的大学提供的一份文件。它说'在顶部是具有最高优先级的操作员' - 以防你不会说德语。我认为很容易看出我是如何误解文件的。 link to reference@Prune
  • 一点也不简单 :-) :该文档通常不可用。此外,任何源材料都应编辑到您的问题中。无论如何,我认为这是一个有争议的问题:有几个人回答了你的问题。
  • 任何人都无法访问您提供的链接,除非他们是您所在大学的教职员工/学生。
  • 就是这样。您还通过投票有用的帖子并选择答案来做对了。谢谢。

标签: python python-3.x operators


【解决方案1】:

根据文档,Multiplication *matrix multiplication @division /floor division //remainder % 都具有相同的优先级。

当两个运算符具有相同的优先级时,关联性有助于确定运算顺序。

现在关于您的问题; /// 具有相同的优先级,如果它们都存在于表达式中,则首先根据 从左到右的关联性 计算左侧的值。

【讨论】:

    【解决方案2】:

    //本质上是地板分割的算子。

    所以 1 // 0.75 本质上是 1.333 的地板,即 1

    -1 // 0.75 本质上是地板 -1.333,即 -2。

    希望这是有道理的。

    【讨论】:

      【解决方案3】:

      从操作顺序的角度考虑这些:

      -1 // 3/4
      

      这将执行-1 "floor" 3,得到-1,然后除以4 得到-0.25

      鉴于:

      -1 // 0.75
      

      这将直接“取消”操作并产生-2.0

      【讨论】:

        【解决方案4】:

        不,它们具有相同的优先级,因此它们是从左到右计算的。

        -1//3 是四舍五入(到最小整数)整数除法,所以你得到-1 除以40.25

        当您有疑问时,插入几个括号不会花费太多。

        【讨论】:

          【解决方案5】:

          表达式文档中有一个关于Operator Precedence 的部分。同一框中的运算符具有相同的优先级。

          因此,表格告诉您/// 具有相同的优先级,所以

          -1 // 3/4 解析为

          >>> (-1//3)/4
          >>> -0.25
          

          【讨论】:

            【解决方案6】:

            /// 运算符根据documentation 具有相同的优先级,因此在同一表达式中使用它们时从左到右进行计算。因此-1 // 3/4 等同于(-1 // 3)/4 而不是-1 // (3/4)

            【讨论】:

              【解决方案7】:

              按照我的理解,/ 运算符在 // 之前执行,因此这两个语句应该具有相同的结果。

              你的理解不正确。 /// 具有相同的优先级并具有左关联性,这意味着 Python 首先执行最左边的操作 - 在您的情况下为 /

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-05-20
                • 2011-06-21
                • 2020-03-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多