আমি বিভিন্ন উত্তরগুলি সত্যিই মার্জিত দেখতে পেয়েছি (বিশেষত অ্যালেক্স মার্তেলির) তবে আমি প্রথম হাতের পারফরম্যান্সকে প্রশংসিত করতে চেয়েছিলাম, তাই আমি নিম্নলিখিত স্ক্রিপ্টটি রান্না করেছি:
from itertools import repeat
N = 10000000
def payload(a):
pass
def standard(N):
for x in range(N):
payload(None)
def underscore(N):
for _ in range(N):
payload(None)
def loopiter(N):
for _ in repeat(None, N):
payload(None)
def loopiter2(N):
for _ in map(payload, repeat(None, N)):
pass
if __name__ == '__main__':
import timeit
print("standard: ",timeit.timeit("standard({})".format(N),
setup="from __main__ import standard", number=1))
print("underscore: ",timeit.timeit("underscore({})".format(N),
setup="from __main__ import underscore", number=1))
print("loopiter: ",timeit.timeit("loopiter({})".format(N),
setup="from __main__ import loopiter", number=1))
print("loopiter2: ",timeit.timeit("loopiter2({})".format(N),
setup="from __main__ import loopiter2", number=1))
আমি একটি বিকল্প সমাধানও নিয়ে এসেছি যা মার্টেলির একটিকে তৈরি করে এবং map()
পেডলোড ফাংশনটি কল করতে ব্যবহার করে। ঠিক আছে, আমি কিছুটা প্রতারণা করেছি যে আমি পে-লোডটি এমন একটি প্যারামিটারটি বাতিল করে দেওয়ার স্বীকৃতি দেওয়ার স্বাধীনতা নিয়েছিলাম: এটির কোনও উপায় আছে কিনা তা আমি জানি না। তবুও, ফলাফল এখানে:
standard: 0.8398549720004667
underscore: 0.8413165839992871
loopiter: 0.7110594899968419
loopiter2: 0.5891903560004721
সুতরাং মানচিত্রটি ব্যবহার করে লুপের জন্য মানের তুলনায় প্রায় 30% এবং মার্তেলির চেয়ে 19% অতিরিক্ত উন্নতি পাওয়া যায়।