2016-12-07 5 views
12

Print multiple arguments in python के ब्लेंडर के पद पर 'सांप और कॉफी' द्वारा टिप्पणी में प्रिंटिंग की 'आयु-पुरानी अस्वीकृत विधि' को नीचे दिए गए कोड को क्यों कहा जाता है? क्या इसे बैकएंड कोड/पायथन 2 या पायथन 3 के कार्यान्वयन के साथ क्या करना है?प्रिंट क्यों है ("टेक्स्ट" + str (var1) + "अधिक टेक्स्ट" + str (var2)) "अस्वीकृत" के रूप में वर्णित है?

print("Total score for " + str(name) + " is " + str(score)) 
+0

नई स्फूर्ति का पहले https://www.python.org/dev/peps/pep-3101/ कि नए (बेहतर, बेशक) स्ट्रिंग स्वरूपण – Pythonista

+0

अस्वीकृत करने के तरीके पेश किया जैसे शुरू किए गए थे? तुम्हारा मतलब बहिष्कृत या पुराना है? –

+2

यहां कुछ बाहरी दस्तावेज हैं। https://pyformat.info –

उत्तर

14

कई तार जोड़ना क्योंकि अस्वीकृत किया गया है:

  • यह विकल्पों की तुलना में वास्तव में पठनीय नहीं है,।
  • यह विकल्प के रूप में उतना ही कुशल नहीं है।
  • यदि आपके पास अन्य प्रकार हैं तो आपको मैन्युअल रूप से str पर कॉल करना होगा।

और, हाँ, यह वास्तव में पुराना है। :-)

सिद्धांत स्ट्रिंग जोड़ में एक नई स्ट्रिंग बनाता है। तो, केवल आपके n तार जोड़ने मान, तो आप n-1 तार बनाने की जरूरत है, लेकिन एक को छोड़कर इन सभी निकाल दिया जाता है क्योंकि आप केवल अंतिम परिणाम में रुचि रखते हैं। तारों को सरणी के रूप में कार्यान्वित किया जाता है ताकि आपके पास कोई लाभ के लिए बहुत अधिक महंगा (पुनः आवंटन) आवंटन न हो।

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

अभ्यास है कि वास्तव में नहीं है क्या, क्योंकि अजगर चेकों हो रहा है अगर एक स्ट्रिंग एक मध्यवर्ती है और कुछ अनुकूलन करता है। तो यह n-2 अनावश्यक सरणी बनाने के रूप में उतना बुरा नहीं है।

छोटे तार और/या इंटरैक्टिव आप उपयोग के लिए भी एक अंतर नोटिस नहीं होगा। लेकिन फिर अन्य तरीकों से अधिक पठनीय होने का लाभ होता है।

वैकल्पिक जा सकता है (पहले दो @MKemps से नकल कर रहे हैं का जवाब):

  • "Total score for {} is {}".format(name, score)
  • "Total score for %s is %s" % (name, score) (भी वर्ष!)
  • "Total score for {name} is {score}".format(name=name, score=score)
  • f"Total score for {name} is {score}" (बहुत नई - अजगर में पेश 3।6)

विशेष रूप से बाद के दो उदाहरण दिखाते हैं कि आप कुछ भी डालने के बिना टेम्पलेट स्ट्रिंग भी पढ़ सकते हैं।

+0

यदि आप नाम और स्कोर (यानी परिवर्तनीय नाम) में एक से अधिक बार टाइप करेंगे तो आप तीसरे विकल्प का उपयोग क्यों करेंगे? स्पष्टता के लिए, मैंने नीचे दिए गए विकल्प को चिपकाया। प्रिंट ("नाम के लिए कुल स्कोर {स्कोर} है।" प्रारूप (नाम = नाम, स्कोर = स्कोर)) – heretoinfinity

+2

@heretoinfinity क्योंकि यह प्लेसहोल्डर्स को एक नाम जोड़ता है और इसलिए संदर्भ देता है। यदि आपके पास लंबी स्ट्रिंग और बहुत सारे इनपुट हैं, तो आप उस प्लेसहोल्डर का प्रतिनिधित्व करने वाले चरम "गिनती" नहीं करना चाहते हैं। कुछ भी डालने के बावजूद आप स्ट्रिंग को "पढ़ सकते हैं" और "समझ सकते हैं"। – MSeifert

+4

@heretoinfinity: शक्तियों का उपयोग करने की संभावना शक्ति है। उदाहरण: 'डेटा = {'ए': 11, 'बी': 12, 'सी': 13}; प्रिंट ('{बी} {ए} से बड़ा है। प्रारूप (** डेटा)) '। – Matthias

3

यह पुराने क्योंकि आप 'बेहतर' तरीके अजगर 3 (और अजगर 2 के बाद के संस्करणों) की शुरूआत के साथ यह फ़ॉर्मेट करने के लिए उपयोग कर सकते हैं माना जाता है।

print("Total score for "+str(name)"+ is "+str(score))

लिखा जा सकता है के रूप में: print("Total score for %s is %s" % (name, score))

हालांकि अलग अलग तरीकों से आप अजगर 2 और इसके बाद के संस्करण के बाद के संस्करणों में प्रिंट फ़ॉर्मेट कर सकते हैं की एक भीड़ कर रहे हैं।

ऊपर क्या है तकनीकी रूप से पुराना है, यह पाइथन 2 और बाद के संस्करणों में इसे करने का एक और तरीका है।

print('Total score for {} is {}'.format(name, score)

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