Menambahkan twist pada jawaban Alphii , sebenarnya for loop akan menjadi yang terbaik kedua dan sekitar 6 kali lebih lambat daripadamap
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])
Perubahan utama adalah untuk menghilangkan sum
panggilan lambat , serta mungkin tidak perlu int()
dalam kasus terakhir. Menempatkan for for dan map dalam istilah yang sama membuatnya menjadi fakta, sebenarnya. Ingat bahwa lambda adalah konsep fungsional dan secara teori seharusnya tidak memiliki efek samping, tetapi, well, mereka dapat memiliki efek samping seperti menambahkan a
. Hasil dalam hal ini dengan Python 3.6.1, Ubuntu 14.04, Intel (R) Core (TM) i7-4770 CPU @ 3.40GHz
0:00:00.257703 #Reduce
0:00:00.184898 #For loop
0:00:00.031718 #Map
0:00:00.212699 #List comprehension