在 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函数以这种方式实现,则必须编写特殊情况代码来处理负输入。但是对于地板式的划分,就像我的第一个例子一样,它只是工作。