我想知道如果總和()內建有一長期添加和anventage?總和功能vs長添加
比
a + b + c + d
假設我使用CPython的速度更快
sum(filter(None, [a, b, c, d]))
?
感謝
編輯:如果這些變量是小數?
我想知道如果總和()內建有一長期添加和anventage?總和功能vs長添加
比
a + b + c + d
假設我使用CPython的速度更快
sum(filter(None, [a, b, c, d]))
?
感謝
編輯:如果這些變量是小數?
一個簡單的例子(注意,要儘量做到公平,在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
謝謝我想我知道了 – maazza
我想唯一的區別是,'sum'在編譯器中已經實現,而'A + B + C + D'首先需要解釋。不過,我懷疑這有很大的不同。 – Dunno
爲什麼你在這裏過濾?假設你所有的值都是實際的數字,我假設只需添加零而不是單獨的傳遞來排除它們會更快。 –
@Karl,不知道我的同事修改了我的代碼我想他有一些理由去做 – maazza