我最近开始学习函数式编程,在尝试计算班级测验平均成绩时,想出了以下示例:
我所想出的示例是:
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不喜欢reduce
。 - fjarri