楼层划分和划分的运算符优先级
operator precedence of floor division and division
我无法理解为什么 python returns 这两个语句的结果不同:
-1 // 3/4
和 -1 // 0.75
第一个 returns -0.25
第二个 returns -2
.
按照我的理解,/
运算符在 //
之前执行,因此这两个语句应该具有相同的结果。
编辑:
我指的是我的大学提供的文件。我误解了那个。官方 python 文档证明我错了。
感谢所有快速回答。
The way i understand it, the /
operator is executed before //
, thus those 2 statements should have the same result.
您的理解有误。 /
和 //
具有相同的优先级并且具有左关联性,这意味着 Python 首先执行最左边的操作 - 在您的情况下,/
.
根据 documentation,/
和 //
运算符具有相同的优先级,因此在同一表达式中使用时,它们的计算顺序是从左到右。 -1 // 3/4
因此等同于 (-1 // 3)/4
而不是 -1 // (3/4)
.
表达式文档中有一节是关于 Operator Precedence 的。同一框中的运算符具有相同的优先级。
因此,table 告诉您 //
和 /
具有相同的优先级,因此
-1 // 3/4
解析为
>>> (-1//3)/4
>>> -0.25
不,它们具有相同的优先级,所以它们是从左到右计算的。
-1//3
是舍入(到最小整数)整数除法,所以你得到 -1
除以 4
:0.25
当你有疑问的时候,加上几个括号并不会花费太多。
从操作顺序的角度考虑这些:
-1 // 3/4
这将执行 -1
"floor" 3
,得到 -1
,然后除以 4
得到 -0.25
。
鉴于:
-1 // 0.75
这将直接 "floor" 操作并产生 -2.0
。
根据文档,Multiplication *
、matrix multiplication @
、division /
、floor division //
、remainder %
都具有相同的优先级。
当两个运算符具有相同的优先级时,结合性有助于确定运算顺序。
现在关于你的问题; /
和 //
都具有相同的优先级,如果它们都出现在表达式中,则根据 从左到右的关联性 首先计算左边的.
//本质上是地板除法运算符。
所以 1 // 0.75 本质上是地板 1.333,即 1
-1 // 0.75 本质上是地板 -1.333,即 -2。
希望这是有道理的。
我无法理解为什么 python returns 这两个语句的结果不同:
-1 // 3/4
和 -1 // 0.75
第一个 returns -0.25
第二个 returns -2
.
按照我的理解,/
运算符在 //
之前执行,因此这两个语句应该具有相同的结果。
编辑: 我指的是我的大学提供的文件。我误解了那个。官方 python 文档证明我错了。 感谢所有快速回答。
The way i understand it, the
/
operator is executed before//
, thus those 2 statements should have the same result.
您的理解有误。 /
和 //
具有相同的优先级并且具有左关联性,这意味着 Python 首先执行最左边的操作 - 在您的情况下,/
.
根据 documentation,/
和 //
运算符具有相同的优先级,因此在同一表达式中使用时,它们的计算顺序是从左到右。 -1 // 3/4
因此等同于 (-1 // 3)/4
而不是 -1 // (3/4)
.
表达式文档中有一节是关于 Operator Precedence 的。同一框中的运算符具有相同的优先级。
因此,table 告诉您 //
和 /
具有相同的优先级,因此
-1 // 3/4
解析为
>>> (-1//3)/4
>>> -0.25
不,它们具有相同的优先级,所以它们是从左到右计算的。
-1//3
是舍入(到最小整数)整数除法,所以你得到 -1
除以 4
:0.25
当你有疑问的时候,加上几个括号并不会花费太多。
从操作顺序的角度考虑这些:
-1 // 3/4
这将执行 -1
"floor" 3
,得到 -1
,然后除以 4
得到 -0.25
。
鉴于:
-1 // 0.75
这将直接 "floor" 操作并产生 -2.0
。
根据文档,Multiplication *
、matrix multiplication @
、division /
、floor division //
、remainder %
都具有相同的优先级。
当两个运算符具有相同的优先级时,结合性有助于确定运算顺序。
现在关于你的问题; /
和 //
都具有相同的优先级,如果它们都出现在表达式中,则根据 从左到右的关联性 首先计算左边的.
//本质上是地板除法运算符。
所以 1 // 0.75 本质上是地板 1.333,即 1
-1 // 0.75 本质上是地板 -1.333,即 -2。
希望这是有道理的。