为什么在Python3中x//y返回float?

为什么在Python3中x//y返回float?,python,python-3.x,types,Python,Python 3.x,Types,我用双斜杠将2个浮点数(或整数)像 t = x // y 在本例中,t必须是一个自然数,但python将其作为float返回 根据惯例和文件,对于x和yfloatint不会有任何好处,但只要->float就足够了,就会产生不必要的成本和类型损失 通常,当任何操作数是浮点时,只有当作为浮点执行时,/的计算才是正确的:浮点操作数可能包含不能表示为整数的小数部分 >4.3//1.1 3 >>>int(4.3)//int(1.1) 4. 因此,对于任何浮点操作数,/本身就是一个浮点计算,并产生这

我用双斜杠将2个浮点数(或整数)像

t = x // y 
在本例中,
t
必须是一个自然数,但python将其作为float返回

根据惯例和文件,对于
x
y
floatx//y
的输出类型为
float
s或
int
s

我的问题是,为什么公约是这样?在
float
而不是
int
中获得结果有什么好处?根据我的理解,floor division总是返回一个整数。因此,行
int(x//y)==x//y
将始终返回
True
。即使结果是
nan
,这也不重要

所以我的问题是为什么
float
更好?在什么情况下会有所不同


这不是的副本,因为在那里他们问这是否是一个bug,而我想知道python设计者为什么做出这个决定。

TLDR:强制
/
(float,float)->int
不会有任何好处,但只要
->float
就足够了,就会产生不必要的成本和类型损失


通常,当任何操作数是
浮点
时,只有当作为
浮点
执行时,
/
的计算才是正确的:
浮点
操作数可能包含不能表示为整数的小数部分

>4.3//1.1
3
>>>int(4.3)//int(1.1)
4.
因此,对于任何
浮点
操作数,
/
本身就是一个
浮点
计算,并产生这样的结果()。将结果提供为
int
仍将计算结果为
float
,仅将其转换为
int
——精度不会提高


根据PEP 238规定的行为,程序员可以自行决定是希望强制执行
int
类型,还是更喜欢真正的
float
结果。

您能提供一个最小的可复制示例吗?您的Python版本是什么?
/
是楼层划分。例如,在py3中,如果执行
10//3
,将得到
3
整数。我尝试使用带有“lst[x//y]”的列表,但我必须将其转换为int。但在什么情况下,它不会是int?
t
不必是自然数。可以是任何整数。是的。如果你问“为什么”,你的问题会因为另一个原因而结束:那就是,它主要基于opnion,不适合这个网站