การเพิ่มคำตอบลงใน Alphiiจริง ๆ แล้วสำหรับ for loop จะดีที่สุดเป็นอันดับสองและช้ากว่าประมาณ 6 เท่าmap
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])
การเปลี่ยนแปลงที่สำคัญคือการกำจัดsum
สายที่ช้ารวมทั้งอาจไม่จำเป็นint()
ในกรณีที่ผ่านมา การใส่ for for loop และ map ในคำเดียวกันทำให้ค่อนข้างเป็นจริง โปรดจำไว้ว่า lambdas เป็นแนวคิดในการทำงานและในทางทฤษฎีไม่ควรมีผลข้างเคียง แต่ก็สามารถมีผลข้างเคียงเช่นการเพิ่มเข้าไปa
ได้ ผลลัพธ์ในกรณีนี้ด้วย 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