2011-03-29 67 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