2014-07-17 36 views
0

我想知道如果總和()內建有一長期添加和anventage?總和功能vs長添加

a + b + c + d 

假設我使用CPython的速度更快

sum(filter(None, [a, b, c, d])) 

感謝

編輯:如果這些變量是小數?

+0

我想唯一的區別是,'sum'在編譯器中已經實現,而'A + B + C + D'首先需要解釋。不過,我懷疑這有很大的不同。 – Dunno

+0

爲什麼你在這裏過濾?假設你所有的值都是實際的數字,我假設只需添加零而不是單獨的傳遞來排除它們會更快。 –

+0

@Karl,不知道我的同事修改了我的代碼我想他有一些理由去做 – maazza

回答

2

一個簡單的例子(注意,要儘量做到公平,在sum版本需要tuple的說法,這樣你就不會包括時間用於構建結構(a, b, c, d),並且不包括不必要的filter):

>>> import timeit 
>>> def add_up(a, b, c, d): 
    return a + b + c + d 

>>> def sum_up(t): 
    return sum(t) 

>>> t = (1, 2, 3, 4) 
>>> timeit.timeit("add_up(1, 2, 3, 4)", setup="from __main__ import sum_up, add_up, t") 
0.2710826617188786 
>>> timeit.timeit("sum_up(t)", setup="from __main__ import sum_up, add_up, t") 
0.3691424539089212 

這幾乎是不可避免的 - add_up沒有任何函數調用開銷,它只是3個二進制增加。但不同的形式有不同的用途 - sum並不關心給它多少項目,而你必須用+寫出每個名字。在具有固定數量項目的示例中,速度至關重要,+具有優勢,但對於幾乎所有的一般情況sum都是有效的方法。

隨着Decimal S:

>>> t = tuple(map(Decimal, t)) 
>>> a = Decimal(1) 
>>> b = Decimal(2) 
>>> c = Decimal(3) 
>>> d = Decimal(4) 
>>> timeit.timeit("add_up(a, b, c, d)", setup="from __main__ import sum_up, add_up, t, a, b, c, d") 
0.5005962150420373 
>>> timeit.timeit("sum_up(t)", setup="from __main__ import sum_up, add_up, t, a, b, c, d") 
0.7599533142681025 
+0

謝謝我想我知道了 – maazza