2012-06-22 15 views
9

मैं हाल ही में कोड के निम्नलिखित टुकड़े में आया था। यह तीन गुना उद्धरण के एक उदाहरण के कारण वैध नहीं दिखता है लेकिन ठीक काम करता प्रतीत होता है। क्या कोई यहां समझा सकता है कि क्या हो रहा है?पायथन स्ट्रिंग concatenation भ्रम

return ("Validation failed(%s): cannot calculate length " 
     "of %s.""" % (self.name, value))` 

उत्तर

9

सभी तारों को पहले समेकित किया जाता है।

"" एक खाली स्ट्रिंग है।

प्रतिस्थापन तब किए जाते हैं।

+1

+1 2min तेज – Mualig

+2

निश्चित रूप से कोई भी इस तरह के भ्रमित कोड को कभी नहीं लिखता। मैंने सवाल के आधार पर खारिज कर दिया! – Felix

+1

इसलिए समेकित तारों और अंतिम खाली स्ट्रिंग के बीच कोई सफेद स्थान की आवश्यकता नहीं है, कोड में कई स्थानों पर दोहराया गया है (मैं संदेह फ़ेलिक्स के लिए एक लिंक पोस्ट कर सकता हूं), केवल खराब कोडिंग है। –

1

जब आप एकाधिक रेखा पर स्ट्रिंग का उपयोग करते हैं तो आप स्ट्रिंग के रूप में एकल लाइन आउटपुट बनाने के लिए " जोड़ सकते हैं। आप के रूप में लाइन पढ़ सकते हैं: आप कोड को संशोधित कर सकते हैं

return ("Validation failed(%s): cannot calculate length " //1st line 
    "of %s." //2nd line 
    "" % (self.name, value)) //3rd line (empty) 
0

, ध्यान दें कि तार फ़ॉर्मेट करने के लिए % वाक्य रचना पुराना होता जा रहा है। आप str.format() का उपयोग करना चाहिए अजगर के अपने संस्करण का समर्थन करता है, तो:

return "Validation failed({0}): cannot calculate length of {1}.".format(self.name, value) 

यह कई पंक्तियों को पार करने वाली की जरूरत है, उपयोग करें:

return ("Validation failed({0}): " + 
     "cannot calculate length of {1}.".format(self.name, value)) 
+0

यह एक टिप्पणी होनी चाहिए, क्योंकि यह वास्तव में प्रश्न का उत्तर नहीं देता है - मूल कोड में वही स्ट्रिंग शाब्दिक संगतता के कारण, '+' की आवश्यकता नहीं है। प्रलेखन का जिक्र करने के लिए – lvc

4

यह पायथन के string literal concatenation है - अनिवार्य रूप से, स्ट्रिंग शाब्दिक सीधे अगले प्रत्येक के लिए प्रदर्शित होने अन्य एक एकल स्ट्रिंग के रूप में पार्स किया जाता है:

>>> 'foo' 'bar' 
'foobar' 

अपने उदाहरण में, आप एक पंक्ति में तीन स्ट्रिंग शाब्दिक है (पिछलेहै, खाली स्ट्रिंग) को इस तरह से संयोजित किया जा रहा है, बजाय एक बहु-पंक्ति शब्दशः जिसे समाप्त किया गया है लेकिन ट्रिपल कोट्स के साथ शुरू नहीं हुआ है।

+0

+1। –

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