楼层分割和分割的运算符优先级

时间:2018-10-30 20:51:20

标签: python python-3.x operators

我很难理解为什么python对于这2条语句返回不同的结果:

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

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

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

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

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

  

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

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

答案 2 :(得分:1)

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

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

-1 // 3/4解析为

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

答案 3 :(得分:1)

不,它们具有相同的优先级,因此从左到右对其进行评估。

-1//3被四舍五入(最小整数)整数除法,因此您得到-1除以40.25

如果您有疑问,只需加上几个括号就可以了。

答案 4 :(得分:1)

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

-1 // 3/4

这将执行-1个“底” 3,产生-1,然后除以4产生-0.25

位置:

-1 // 0.75

这将直接使操作“底层”并产生-2.0

答案 5 :(得分:1)

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

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

现在关于您的问题; ///的优先级都相同,并且如果两个表达式中都存在它们,则首先根据从左到右的关联性评估左一个。

答案 6 :(得分:0)

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

所以1 // 0.75本质上是1.333底线,即1

-1 // 0.75本质上是-1.333的下限,即-2。

希望这很有道理。