Python 3.2 中的截断除法

Jus*_*ong 5 python division

  1. Python 3.2 中整数除法//比浮点除法更快吗?/如果我知道我将只使用整数,我应该赞成//而不是默认吗/

  2. 如何在 Python 3.2 中获得整数截断行为?

    1/2 = 0

    -1/2 = 0

谢谢。

Eri*_*ren 3

from math import (floor, ceil)
def trunc_div(a, b):
    c = a / b
    return floor(c) if c > 0 else ceil(c)
Run Code Online (Sandbox Code Playgroud)

测试一下以确保它是正确的。已经很晚了,我正在睡觉时做数学。

事实上,不要这样做。在查看是否可以对 int 进行子类化以进行截断除法(也不要这样做(而且它不起作用))时,我突然想到它int()本身会截断实数,从而导致:

def trunc_div(a, b):
    return int(a / b)
Run Code Online (Sandbox Code Playgroud)

这是一个相当愚蠢的包装。

因此,只需使用浮点除法,并用以下方法截断它int()

>>> int(1 / 2)
0
>>> int(-1 / 2)
0
Run Code Online (Sandbox Code Playgroud)

这使您非常接近您想要的中缀表示法。

这个故事的寓意是……不要让你的朋友在昏昏欲睡时编码。