Thêm một bước ngoặt cho câu trả lời Alphii , thực sự thì vòng lặp for sẽ tốt thứ hai và chậm hơn khoảng 6 lần so vớimap
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])
Những thay đổi chính là để loại bỏ các sum
cuộc gọi chậm , cũng như có thể không cần thiết int()
trong trường hợp cuối cùng. Đặt vòng lặp for và ánh xạ theo cùng một thuật ngữ khiến nó trở nên khá thực tế. Hãy nhớ rằng lambdas là khái niệm chức năng và về mặt lý thuyết không nên có tác dụng phụ, nhưng, tốt, chúng có thể có tác dụng phụ như thêm vào a
. Kết quả trong trường hợp này với Python 3.6.1, Ubuntu 14.04, CPU Intel (R) Core (TM) i7-4770 @ 3,40GHz
0:00:00.257703 #Reduce
0:00:00.184898 #For loop
0:00:00.031718 #Map
0:00:00.212699 #List comprehension