2011-03-29 38 views
2
  1. 是整数除法地板比//浮师/在Python 3.2快?如果我知道我将要与整数唯一的工作,我应该有利于//,而不是默认为/的?截断师在Python 3.2

  2. 我如何在Python 3.2整数截断行为?

    1/2 = 0

    -1/2 = 0

感谢。

+2

关于问题1 - ['timeit'](http://docs.python.org/py3k/library/timeit.html)确实不难使用。 – 2011-03-29 08:28:54

+0

谢谢,我刚刚开始与Python,不知道有这样的功能。看起来像/比小小的weeny比//快。 – 2011-03-29 08:42:18

+1

对于第一个问题,请参阅[这](http://stackoverflow.com/questions/1396564/why-is-subtraction-faster-than-addition-in-python)的启发性第一个答案,为什么这是不可能的很重要。具体来说:'原生加减操作码的速度是无关紧要的。它处于噪声层,与字节码评估完全相形见绌。这是在谈论一个或两个本地指令数千个.' – 2011-03-29 08:54:04

回答

1
from math import (floor, ceil) 
def trunc_div(a, b): 
    c = a/b 
    return floor(c) if c > 0 else ceil(c) 

测试,以确保它是正确的。现在已经很晚了,我在昏昏欲睡时做数学。

其实,不这样做。虽然看,如果我能继承INT做截断除法(不这样做,要么(也没用)),它发生,我认为int()本身会截断实数,造成这样的:

def trunc_div(a, b): 
    return int(a/b) 

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

所以,仅仅用浮法事业部,并与int()截断它:

>>> int(1/2) 
0 
>>> int(-1/2) 
0 

这让你很接近你期望中缀符号。

这个故事的寓意是......不要让昏昏欲睡,而您的朋友的代码。

+0

谢谢,我知道这样的事情会工作,只是想知道在Python中是否有这样的本地语言功能,所以我可以使用中缀运算符而不是函数。 – 2011-03-29 08:52:17