我想知道sum()内置是否有长期添加的延迟?
是
sum(filter(None, [a, b, c, d]))
比
快a + b + c + d
假设我正在使用CPython?
感谢
编辑:如果这些变量是小数,怎么办?
答案 0 :(得分: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