2010-01-09 11 views
8
var1 = 'abc' 
var2 = 'xyz' 

print('literal' + var1 + var2) # literalabcxyz 
print('literal', var1, var2) # literal abc xyz 

... 'के साथ स्वचालित रिक्त स्थान को छोड़कर, दोनों के बीच क्या अंतर है? सामान्य रूप से उपयोग करने के लिए, जो सबसे तेज़ है?कंसटेनेशन ऑपरेटर + या,

धन्यवाद

उत्तर

21

(आप अजगर 3.x का उपयोग कर रहे हैं, जहां प्रिंट 2.x में एक समारोह — है, प्रिंट एक बयान है। यह प्रमुख अजगर संस्करण — 2.x उल्लेख या 3 करने के लिए एक अच्छा विचार है। एक्स — खासकर जब, मदद के लिए पूछ क्योंकि वर्तमान में ज्यादातर लोगों को यथोचित 2.x मान जब तक यह कहा गया है।)

पहले print('literal' + var1 + var2), एक अभिव्यक्ति मूल्यांकन करता है और गुजरता एक भी तर्क मुद्रित करने के लिए। दूसरा, print('literal', var1, var2), प्रिंट करने के लिए तीन तर्क पास करता है। यह मौका से पूरी तरह से एक ही आउटपुट है: इस तरह प्रिंट प्रिंट करता है। दूसरा कोई संगतता नहीं कर रहा है, और बस एक स्थान से अलग प्रत्येक मान को आउटपुट कर रहा है (जो प्रिंट का डिफ़ॉल्ट व्यवहार है)।

स्पष्ट होने के लिए: अभिव्यक्ति है संयोजन करने में अधिक है, लेकिन अल्पविराम संयोजन कर नहीं है।


समय: मैं नीचे दिए गए परिणामों मिला, हालांकि, मेरा मानना ​​है कि यह पक्षपातपूर्ण है क्योंकि तार बहुत कम हैं (उदाहरण के लिए लंबे तार परिणाम को उलट सकते हैं), और किसी भी मामले में, प्रश्न में प्रस्तुत होने के रूप में प्रिंटिंग में अधिक समय नहीं लगेगा (आपको कई लोगों के बारे में चिंता करने में बेहतर प्रदर्शन मिलेगा इसके बजाय अन्य चीजें)।

नोट: टाइमिट का उपयोग करने के निर्देशों के लिए python -m timeit --help का उपयोग करें।

$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, a, b' 
100000 loops, best of 3: 7.68 usec per loop 
$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, a + " " + b' 
100000 loops, best of 3: 4.67 usec per loop 
$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, " ".join([a, b])' 
100000 loops, best of 3: 5.37 usec per loop 

विशेष रूप से, प्रत्येक कोड ठीक उसी उत्पादन दे देंगे नोटिस (यह व्यर्थ अगर एक विधि गलत परिणाम देता तुलना करने के लिए है)। स्ट्रिंगियो इन परीक्षणों में स्क्रीन पर प्रिंट करने का एक आसान तरीका है, लेकिन यह परिणाम भी प्रभावित कर सकता है।

+0

जो दोनों के बीच सबसे तेज़ है? – 3zzy

+0

वे अलग-अलग चीजें करते हैं, आप उन्हें गति के लिए उचित रूप से तुलना नहीं कर सकते हैं। उस ने कहा, आप * मुद्रण * की तुलना दो अलग-अलग तरीकों से कर सकते हैं, टाइमिट मॉड्यूल का उपयोग करें। –

+1

ध्यान दें कि उपर्युक्त समय के लिए, सीस्ट्रिंगियो कंसोल पर लिखने के मुकाबले अलग-अलग प्रदर्शन करने जा रहा है, और कंसोल पर लिखते समय प्रदर्शन आपके द्वारा किए जा रहे प्लेटफॉर्म और स्ट्रिंग्स के आकार के आधार पर भिन्न हो सकता है। –

1

एक अल्पविराम का उपयोग करना प्रिंट समारोह कई तर्क (जो इस मामले में सभी मुद्रित कर रहे हैं, एक जगह से अलग कर देता है। प्लस का उपयोग करना प्रिंट है, जो अपनी संपूर्णता में छपा है के लिए एक तर्क पैदा करेगा। मैं का उपयोग कर + इस मामले में सबसे अच्छा है लगता है।

5

प्रिंट तर्कों के रूप तार पासिंग उन्हें 'सितम्बर' कीवर्ड के साथ जुड़ जाता है। डिफ़ॉल्ट '' है (स्थान)।

सेपरेटर कीवर्ड केवल अजगर 3.x है इससे पहले कि विभाजक हमेशा एक जगह है, 2.5 (?) और ऊपर जहां आपकर सकते हैंया ऐसा कुछ।

>>> print('one', 'two') # default ' ' 
one two 
>>> print('one', 'two', sep=' and a ') 
one and a two 
>>> ' '.join(['one', 'two']) 
one two 
>>> print('one' + 'two') 
onetwo 
+1

जो दोनों के बीच सबसे तेज़ है? – 3zzy

संबंधित मुद्दे