为什么Python 3.x有不寻常的泛(整数)除法行为?

时间:2015-06-09 16:10:55

标签: python integer-division

由于Python整数除法运算符(a // b)总是返回一个值,该值可以安全地存储在int中而不会丢失精度(无论a和b的值是什么),为什么以下真?

如果一个或两个操作数的类型为float,则此运算符将返回float

仅当两个操作数都是int类型时,此运算符才会返回int

如果__floordiv__的每个实施都返回int,那么它会更加一致吗?

1 个答案:

答案 0 :(得分:2)

Python声明两个参数都被强制转换为普通类型。来自Numeric types documentation

  

Python完全支持混合算术:当二进制算术运算符具有不同数值类型的操作数时,具有“较窄”类型的操作数被加宽到另一个的操作数,其中整数比浮点更窄,这比复数更窄。

来自 Expressions 文档的Arithmetic conversions section

  

当下面的算术运算符的描述使用短语“数字参数转换为公共类型”时,这意味着内置类型的运算符实现如下:

     
      
  • 如果任一参数是复数,则另一个参数转换为复数;
  •   
  • 否则,如果任一参数是浮点数,则另一个转换为浮点数;
  •   
  • 否则,两者必须是整数,不需要转换。
  •   

然后Binary arithmetic operations section(包括楼层划分)然后使用该措辞:

  

/(除法)和//(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。

场内分区运营商也不例外;所有算术运算符的行为完全相同。

如果地板划分的行为不同,那么这个规则就是例外,创建不一致的行为,而不是更加一致。