तो यह एक CPython बात है, यह एक ही व्यवहार है काफी यकीन नहीं है कि अन्य कार्यान्वयन के साथ।'{0}'। प्रारूप() str से() और '{}' तेज है। प्रारूप() IPython% timeit का उपयोग कर और नहीं तो शुद्ध अजगर का उपयोग कर
लेकिन '{0}'.format()
str()
और '{}'.format()
से तेज़ है। मैं अजगर 3.5.2 से परिणाम पोस्टिंग कर रहा हूँ, लेकिन, मैं साथ इसे करने की कोशिश अजगर 2.7.12 और प्रवृत्ति में ही है।
%timeit q=['{0}'.format(i) for i in range(100, 100000, 100)]
%timeit q=[str(i) for i in range(100, 100000, 100)]
%timeit q=['{}'.format(i) for i in range(100, 100000, 100)]
1000 loops, best of 3: 231 µs per loop
1000 loops, best of 3: 298 µs per loop
1000 loops, best of 3: 434 µs per loop
docs से object.__str__(self)
str(object)
द्वारा कहा जाता है और बिल्ट-इन कार्यformat()
औरprint()
पर एक वस्तु का "अनौपचारिक" या अच्छी तरह से प्रिंट करने योग्य स्ट्रिंग प्रतिनिधित्व गणना करने के लिए।
तो, str()
और format()
कॉल एक ही object.__str__(self)
विधि, लेकिन जहां गति में है कि अंतर से आता है?
अद्यतन @StefanPochmann और @Leon टिप्पणियों में नोट किया गया, उन्हें अलग-अलग परिणाम मिलते हैं। मैं python -m timeit "..."
साथ इसे चलाने के लिए कोशिश की और, वे सही हैं, क्योंकि परिणाम हैं:
$ python3 -m timeit "['{0}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 441 usec per loop
$ python3 -m timeit "[str(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 297 usec per loop
$ python3 -m timeit "['{}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 420 usec per loop
तो ऐसा लगता है कि IPython कुछ अजीब कर रहा है ...
नया सवाल: क्या पसंद किया जाता है जिस तरह से किसी ऑब्जेक्ट को str
पर गति से परिवर्तित करने के लिए?
तेज होने के लिए, आप सीधे 'i .__ str __()' का उपयोग करने का प्रयास कर सकते हैं। हालांकि 'str' वास्तव में सही तरीका है। क्या यह आपके लिए पर्याप्त तेज़ नहीं है? –