मैं सिर्फ जिज्ञासा से बाहर अलग-अलग स्ट्रिंग संघनन / प्रतिस्थापन विधियों की गति का परीक्षण कर रहा था। विषय पर एक Google खोज मुझे यहाँ लाया। मुझे लगा कि मैं अपने परीक्षा परिणाम इस उम्मीद में पोस्ट करूंगा कि इससे किसी को निर्णय लेने में मदद मिल सकती है।
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):
# runs a single test for all functions in the 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):
# runs multiple tests for all functions in the list
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
और %
विधियों । मुझे लगता है कि यह स्ट्रिंग्स पर निर्भर करता है, और आप क्या हासिल करने की कोशिश कर रहे हैं। यदि प्रदर्शन वास्तव में मायने रखता है, तो अलग-अलग चीजों की कोशिश करना और उनका परीक्षण करना बेहतर हो सकता है। मैं गति पर पठनीयता का चयन करता हूं, जब तक कि गति एक समस्या नहीं बन जाती, लेकिन यह सिर्फ मुझे लगता है। एसओ को मेरी कॉपी / पेस्ट पसंद नहीं आया, मुझे इसे सही दिखाने के लिए हर चीज पर 8 जगह रखनी पड़ी। मैं आमतौर पर 4 का उपयोग करता हूं।