En ajoutant une torsion à la réponse Alphii , en fait la boucle for serait la deuxième meilleure et environ 6 fois plus lente quemap
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])
Les principaux changements ont été d'éliminer les sumappels lents , ainsi que les appels probablement inutiles int()dans le dernier cas. Mettre la boucle for et la carte dans les mêmes termes en fait tout à fait un fait. Rappelez-vous que les lambdas sont des concepts fonctionnels et ne devraient théoriquement pas avoir d'effets secondaires, mais, eh bien, ils peuvent avoir des effets secondaires comme l'ajout de a. Résultats dans ce cas avec Python 3.6.1, Ubuntu 14.04, processeur Intel (R) Core (TM) i7-4770 à 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