【发布时间】:2021-01-12 14:59:24
【问题描述】:
DocumentationDocumentation 关于 Python 中的楼层划分说,
/(除法)和 //(下除法)运算符产生其参数的商。数字参数首先转换为通用类型。整数除法产生一个浮点数,而整数的下除法产生一个整数;结果是对结果应用“floor”函数的数学除法。
我专注于最后一行,也就是说,
结果是数学除法,结果应用了“floor”函数
我收到了float:
>>> 10//2.0
5.0
但是integer 在:
>>> import math
>>> math.floor(10/2.0)
5
所以显然不是 Python 楼层划分使用的math.floor 函数。我想知道 Python 计算两个参数的底除法的确切过程。
因为在取complex 数字的地板除法时,Python 说,
>>> (2+3j)//(4+5j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't take floor of complex number.
这意味着 Python 会先进行除法运算,然后再应用某种底函数。它到底是什么?
【问题讨论】:
-
这并不能回答你关于它是如何工作的问题(这可能取决于实现,我不确定),但请参阅this question about whether the behaviour is expected。
-
@ThierryLathuille “内置
floor”是什么意思。 -
@Chris 是的,行为符合预期。我之前读过一个类似的问题。我只是想知道幕后发生了什么。
-
正如我之前所说,我怀疑这取决于实现。 “Python”不止一种,还有很多:CPython、Jython、PyPy、IronPython、MicroPython、Brython……
-
这确实是其他评论中提到的特定实现。对于 PyPy,它是一个基于 rpython 的实现:foss.heptapod.net/pypy/pypy/-/blob/branch/default/pypy/objspace/…,寻找
descr_floordiv函数,这是作为分子的浮点数。试一试,它的可读性很好。
标签: python floor-division