अल्फी जवाब में एक मोड़ जोड़कर , वास्तव में लूप के लिए दूसरा सबसे अच्छा होगा और लगभग 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()
आखिरी मामले में संभवतः अनावश्यक भी हैं । लूप और मानचित्र को समान शब्दों में रखना वास्तव में इसे काफी तथ्यपूर्ण बनाता है। याद रखें कि लैम्ब्डा कार्यात्मक अवधारणाएं हैं और सैद्धांतिक रूप से साइड इफेक्ट नहीं होना चाहिए, लेकिन, ठीक है, वे साइड इफेक्ट्स जैसे जोड़ सकते हैं a
। इस मामले में पायथन 3.6.1, उबंटू 14.04, इंटेल (आर) कोर (टीएम) i7-4770 सीपीयू 3.30GHz के साथ परिणाम
0:00:00.257703 #Reduce
0:00:00.184898 #For loop
0:00:00.031718 #Map
0:00:00.212699 #List comprehension