由于Python整数除法运算符(a // b
)总是返回一个值,该值可以安全地存储在int
中而不会丢失精度(无论a和b的值是什么),为什么以下真?
如果一个或两个操作数的类型为float
,则此运算符将返回float
。
仅当两个操作数都是int
类型时,此运算符才会返回int
。
如果__floordiv__
的每个实施都返回int
,那么它会更加一致吗?
答案 0 :(得分:2)
Python声明两个参数都被强制转换为普通类型。来自Numeric types documentation:
Python完全支持混合算术:当二进制算术运算符具有不同数值类型的操作数时,具有“较窄”类型的操作数被加宽到另一个的操作数,其中整数比浮点更窄,这比复数更窄。
来自 Expressions 文档的Arithmetic conversions section:
当下面的算术运算符的描述使用短语“数字参数转换为公共类型”时,这意味着内置类型的运算符实现如下:
- 如果任一参数是复数,则另一个参数转换为复数;
- 否则,如果任一参数是浮点数,则另一个转换为浮点数;
- 否则,两者必须是整数,不需要转换。
然后Binary arithmetic operations section(包括楼层划分)然后使用该措辞:
/
(除法)和//
(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。
场内分区运营商也不例外;所有算术运算符的行为完全相同。
如果地板划分的行为不同,那么这个规则就是例外,创建不一致的行为,而不是更加一致。