Wenn Sie der Alphii-Antwort eine Wendung hinzufügen , ist die for-Schleife die zweitbeste und ungefähr sechsmal langsamer alsmap
from functools import reduce
import datetime
def time_it(func, numbers, *args):
start_t = datetime.datetime.now()
for i in range(numbers):
func(args[0])
print (datetime.datetime.now()-start_t)
def square_sum1(numbers):
return reduce(lambda sum, next: sum+next**2, numbers, 0)
def square_sum2(numbers):
a = 0
for i in numbers:
a += i**2
return a
def square_sum3(numbers):
a = 0
map(lambda x: a+x**2, numbers)
return a
def square_sum4(numbers):
a = 0
return [a+i**2 for i in numbers]
time_it(square_sum1, 100000, [1, 2, 5, 3, 1, 2, 5, 3])
time_it(square_sum2, 100000, [1, 2, 5, 3, 1, 2, 5, 3])
time_it(square_sum3, 100000, [1, 2, 5, 3, 1, 2, 5, 3])
time_it(square_sum4, 100000, [1, 2, 5, 3, 1, 2, 5, 3])
Die wichtigsten Änderungen bestanden darin, die langsamen sum
Anrufe sowie die int()
im letzten Fall wahrscheinlich unnötigen zu beseitigen . Wenn Sie die for-Schleife und die Map in die gleichen Begriffe setzen, ist dies tatsächlich eine Tatsache. Denken Sie daran, dass Lambdas funktionale Konzepte sind und theoretisch keine Nebenwirkungen haben sollten, aber sie können Nebenwirkungen wie das Hinzufügen zu haben a
. Ergebnisse in diesem Fall mit Python 3.6.1, Ubuntu 14.04, Intel (R) Core (TM) i7-4770-CPU bei 3,40 GHz
0:00:00.257703 #Reduce
0:00:00.184898 #For loop
0:00:00.031718 #Map
0:00:00.212699 #List comprehension