我最近开始学习函数式编程,并在尝试计算我的类(class)测验平均分时想出了这个例子。
我想出的例子是:
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 倍。
所以我的问题是,什么时候是使用高阶函数的好时机,因为上面的例子显然不是?
最佳答案
当您需要对数据列表进行任意操作时,
reduce()
才有意义,而不是当您已经拥有一个不仅性能优于 reduce()
在小列表上,但大大在大列表上优于它。
reduce()
为您提供了创建任意折叠的灵 active ,但这种灵 active 是以一些性能开销为代价的,尤其是在大多数基本函数构造被认为略微超出主流的语言中。
Python 是“函数式”的,因为它具有一流的函数,但它主要不是一种函数式语言。它提供了大量用于循环的迭代器,并具有使显式循环易于编写的各种语言特性,但并不专注于递归定义的列表操作(尽管它确实在有限程度上允许它们——缺乏 TCO阻止我直接在 Python 中解释我的 Erlang 或 Guile 代码,但确实让我可以灵活地做像 benchmark competing approaches that adhere to similar interfaces 这样的事情。
关于python - 你什么时候会使用 reduce() 而不是 sum()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772092/