在 Python 中,a // b
定义为 floor(a/b),与大多数其他语言中整数除法定义为 trunc(a/b) 不同。a % b
=的解释存在相应的差异a - (a // b) * b
。
原因是 Python 对%
运算符 (and )的定义divmod
通常比其他语言更有用。例如:
def time_of_day(seconds_since_epoch):
minutes, seconds = divmod(seconds_since_epoch, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
return '%02d:%02d:%02d' % (hours, minutes, seconds)
使用此函数,如您所料,time_of_day(12345)
返回。'03:25:45'
但是纪元前12345 秒是几点钟呢?使用 Python 的定义divmod
,time_of_day(-12345)
正确返回'20:34:15'
.
如果我们重新定义divmod
以使用/
and的 C 定义会%
怎样?
def divmod(a, b):
q = int(a / b) # I'm using 3.x
r = a - b * q
return (q, r)
现在,time_of_day(-12345)
返回'-3:-25:-45'
,这不是一天中的有效时间。如果标准 Pythondivmod
函数以这种方式实现,则必须编写特殊情况代码来处理负输入。但是对于地板式的划分,就像我的第一个例子一样,它只是工作。