Ich begann vor kurzem, funktionale Programmierung zu lernen, und kam mit diesem Beispiel auf, als ich versuchte, meinen Quizdurchschnitt für eine Klasse zu berechnen.Wann würdest du reduce() anstelle von sum() verwenden?
Das Beispiel kam ich mit ist:
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
Es wäre, dass im obigen Beispiel scheinen, eine Funktion höherer Ordnung mit fast 4-mal langsamer.
Also meine Fragen ist, wann wäre eine gute Zeit, um eine Funktion höherer Ordnung zu verwenden, weil das obige Beispiel eindeutig nicht ist?
Was ist mit der Verwendung von 'operator.add' anstelle einer benutzerdefinierten Funktion? Außerdem zwei Punkte: 1. 'sum' kann besser lesbar aussehen, je nachdem, was der Code tut (in Ihrem Fall); 2. [Guido mag nicht "reduzieren"] (http://www.artima.com/weblogs/viewpost.jsp?thread=98196) – fjarri
@repzero was meinst du mit Funktionsdetails? –
@fjarri hinzugefügt Fall mit operator.add, Summe ist noch schneller. Und ich stimme zu, dass die Summe in den meisten Fällen besser lesbar ist, aber ich frage mich, ob die Funktion höherer Ordnung irgendwelche Leistungsvorteile oder andere Arten von Vorteilen bringen könnte. –