আমি কৌতুহল ছাড়াই কেবল ভিন্ন স্ট্রিং সংশ্লেষ / প্রতিস্থাপন পদ্ধতিগুলির গতি পরীক্ষা করছিলাম। বিষয় সম্পর্কে একটি গুগল অনুসন্ধান আমাকে এখানে এনেছে। আমি ভেবেছিলাম যে আমি আমার পরীক্ষার ফলাফল পোস্ট করব এই আশায় যে এটি কারওর সিদ্ধান্ত নিতে সহায়তা করবে।
import timeit
def percent_():
return "test %s, with number %s" % (1,2)
def format_():
return "test {}, with number {}".format(1,2)
def format2_():
return "test {1}, with number {0}".format(2,1)
def concat_():
return "test " + str(1) + ", with number " + str(2)
def dotimers(func_list):
for func in func_list:
tmr = timeit.Timer(func)
res = tmr.timeit()
print "test " + func.func_name + ": " + str(res)
def runtests(func_list, runs=5):
for i in range(runs):
print "----------- TEST #" + str(i + 1)
dotimers(func_list)
... দৌড়ানোর পরে runtests((percent_, format_, format2_, concat_), runs=5)
, আমি দেখতে পেলাম যে% পদ্ধতিটি এই ছোট স্ট্রিংগুলিতে অন্যদের চেয়ে দ্বিগুণ দ্রুত ছিল। কনক্যাট পদ্ধতিটি সর্বদা ধীর (সবে) ছিল। format()
পদ্ধতিতে অবস্থানগুলি স্যুইচ করার সময় খুব ছোট পার্থক্য ছিল , তবে অবস্থানগুলি স্যুইচ করা সর্বদা নিয়মিত বিন্যাস পদ্ধতির চেয়ে কমপক্ষে .01 ধীর ছিল।
পরীক্ষার ফলাফলের নমুনা:
test concat_() : 0.62 (0.61 to 0.63)
test format_() : 0.56 (consistently 0.56)
test format2_() : 0.58 (0.57 to 0.59)
test percent_() : 0.34 (0.33 to 0.35)
আমি এগুলি চালিয়েছি কারণ আমি আমার স্ক্রিপ্টগুলিতে স্ট্রিং কনটেনটেশন ব্যবহার করি এবং আমি ভাবছিলাম যে ব্যয়টি কী। কোনও কিছুই হস্তক্ষেপ করছে না, বা ভাল পারফরম্যান্স পাচ্ছে তা প্রথম বা শেষের দিকে তা নিশ্চিত করার জন্য আমি তাদেরকে বিভিন্ন আদেশে চালিয়েছি। পাশের নোটে, আমি এই জাতীয় ফাংশনগুলিতে কিছু দীর্ঘ স্ট্রিং জেনারেটর নিক্ষেপ করেছি "%s" + ("a" * 1024)
এবং নিয়মিত কনক্যাটটি প্রায় 3 গুণ দ্রুত (1.1 বনাম 2.8) format
এবং %
পদ্ধতিগুলি ব্যবহার করে । আমার ধারণা এটি স্ট্রিংগুলির উপর নির্ভর করে এবং আপনি কী অর্জন করতে চাইছেন trying কর্মক্ষমতা যদি সত্যিই গুরুত্বপূর্ণ হয় তবে বিভিন্ন জিনিস চেষ্টা করে পরীক্ষা করে নেওয়া আরও ভাল better আমি গতির চেয়ে বেশি পঠনযোগ্যতা বেছে নেওয়ার ঝোঁক রেখেছি, যদি না গতি সমস্যা হয়ে দাঁড়ায় তবে কেবল আমাকেই তা জানায়। সুতরাং আমার অনুলিপি / পেস্ট পছন্দ হয়নি, এটিকে সঠিক দেখানোর জন্য আমাকে সবকিছুতে 8 টি স্পেস রাখতে হয়েছিল। আমি সাধারণত 4 ব্যবহার করি।