【发布时间】:2015-11-18 04:53:17
【问题描述】:
我最近开始学习函数式编程,并在尝试计算我的班级测验平均成绩时想出了这个例子。
我想出的例子是:
scores = [90, 91, 92, 94, 95, 96, 97, 99, 100]
def add(num1, num2):
'''returns the sum of the parameters'''
return num1 + num2
import operator
timeit reduce(add, scores) / len(scores) #--> 1000000 loops, best of 3: 799 ns per loop
timeit sum(scores) / len(scores) #--> 1000000 loops, best of 3: 207 ns per loop
timeit reduce(operator.add, scores) / len(scores) #--> 1000000 loops, best of 3: 485 ns per loop
在上面的例子中,使用高阶函数似乎慢了近 4 倍。
所以我的问题是,什么时候是使用高阶函数的好时机,因为显然上面的例子不是?
【问题讨论】:
-
使用
operator.add代替自定义函数怎么样?另外,有两点: 1.sum可能看起来更具可读性,具体取决于代码的作用(在您的情况下会这样); 2.Guido does not likereduce -
@repzero 你说的功能细节是什么意思?
-
@fjarri 使用 operator.add 添加大小写,sum 仍然更快。我同意 sum 在大多数情况下更具可读性,但我想知道高阶函数何时会产生任何性能优势或其他类型的优势。
标签: python functional-programming profiling