दिलचस्प पोस्ट
आर में एक ही साजिश में दो रेखांकन प्लोट करें अतुल्यकालिक बनाम तुल्यकालिक निष्पादन, इसका वास्तव में क्या अर्थ है? Iframe के अंदर क्लिक ईवेंट का पता लगाएं डुप्लिकेट कुंजी पर MySQL – अंतिम प्रविष्टि आईडी? अप्रबंधित C ++ क्लाइंट के लिए WCF सेवा बनाएँ चेतावनी और php / mysql पर त्रुटियों को बंद करें AngularJS: वादे का प्रयोग कहाँ करना है? कॉलिंग पद्धति के बारे में जानकारी प्राप्त करने के लिए उत्पादन कोड में PHP debug_backtrace? मैं एक टंकिनर विंडो में माउस की स्थिति कैसे निर्धारित कर सकता हूं मैं UIImageView के अंदर छवि को कैसे पैन कर सकता हूं? जावास्क्रिप्ट: विभाजित IE में काम नहीं करता है? कैसे JTextField में वर्णों की संख्या को सीमित करने के लिए? यूआईएलबल में कस्टम स्थापित फ़ॉन्ट ठीक से प्रदर्शित नहीं है स्थिति में विभाजित संख्यात्मक वेक्टर PHP गिनती XML तत्व

पायथन कई स्ट्रिंग फ़ॉर्मेटिंग के तरीके – पुराने हैं (होने वाला) पदावनत?

अजगर में स्ट्रिंग फ़ॉर्मेट करने के कम से कम पांच तरीके हैं:

In [1]: world = "Earth" # method 1a In [2]: "Hello, %s" % world Out[2]: 'Hello, Earth' # method 1b In [3]: "Hello, %(planet)s" % {"planet": world} Out[3]: 'Hello, Earth' # method 2a In [4]: "Hello, {0}".format(world) Out[4]: 'Hello, Earth' # method 2b In [5]: "Hello, {planet}".format(planet=world) Out[5]: 'Hello, Earth' In [6]: from string import Template # method 3 In [7]: Template("Hello, $planet").substitute(planet=world) Out[7]: 'Hello, Earth' 

विभिन्न तरीकों का एक संक्षिप्त इतिहास:

  • printf शैली स्वरूपण अजगर की शुरुआत के बाद से है
  • Template वर्ग को पायथन 2.4 में पेश किया गया था
  • format विधि को पायथन 2.6 में पेश किया गया था

मेरे प्रश्न हैं:

  • क्या printf -style स्वरूपण नापसंद या नापसंद होने जा रहा है?
  • Template class , क्या substitute विधि नापसंद है या नापसंद हो रही है? (मैं सुरक्षित_स्यूबस्टीटिव के बारे में बात नहीं कर रहा हूँ, जैसा कि मैं समझता हूं कि यह अद्वितीय क्षमताएं प्रदान करता है)

समान प्रश्न और मुझे क्यों लगता है कि वे डुप्लिकेट नहीं हैं:

  • पायथन स्ट्रिंग स्वरूपण:% बनाम। प्रारूप – केवल तरीकों 1 और 2 को मानता है, और पूछता है कि कौन बेहतर है; मेरा प्रश्न स्पष्ट रूप से अजगर के ज़ेन की रोशनी में बहिष्कार के बारे में है

  • स्ट्रिंग फ़ॉर्मेटिंग विकल्प: पेशेवर और विपक्ष – केवल 1 1 ए और 1 बी के उत्तर में प्रश्न, 1 और 2 में व्यवहार करता है, और नापसंद के बारे में भी कुछ नहीं

  • उन्नत स्ट्रिंग स्वरूपण बनाम टेम्पलेट स्ट्रिंग – ज्यादातर तरीकों 1 और 3 के बारे में, और बहिष्कार को संबोधित नहीं करता है

  • स्ट्रिंग फॉर्मेटिंग एक्सप्रेशन (पायथन) – उत्तर में उल्लेख किया गया है कि मूल '%' दृष्टिकोण को बहिष्कृत करने की योजना है । लेकिन बहिष्कृत किए जाने की योजना बनाई गई है , बहिष्कार और वास्तविक बहिष्कार के बीच क्या अंतर है? और printf शैली की पद्धति किसी भी PendingDeprecationWarning को नहीं PendingDeprecationWarning , तो क्या यह वास्तव में नापसंद होने जा रहा है? यह पोस्ट भी काफी पुरानी है, इसलिए जानकारी पुरानी हो सकती है

संपादित करें:

ऐसा प्रतीत होता है कि पीईपी 04 9 के माध्यम से, पायथन 3.6 में शुरू हो रहा है, फिर भी एक और तरीका होगा: शाब्दिक स्ट्रिंग इंपोलेशन ।

पीईपी 502 भी देखेंः स्ट्रिंग इंपोलेशन – विस्तारित चर्चा

Solutions Collecting From Web of "पायथन कई स्ट्रिंग फ़ॉर्मेटिंग के तरीके – पुराने हैं (होने वाला) पदावनत?"

नया .format() विधि पुराने % स्वरूपण वाक्यविन्यास को बदलने के लिए होती है उत्तरार्द्ध पर जोर दिया गया है, (लेकिन आधिकारिक तौर पर अभी तक पदावनत नहीं हुआ )। विधि प्रलेखन के अनुसार ज्यादा है:

स्ट्रिंग फ़ॉर्मेटिंग की यह विधि पायथन 3 में नया मानक है, और नए कोड में स्ट्रिंग फ़ॉर्मेटिंग संचालन में वर्णित % स्वरूपण को प्राथमिकता दी जानी चाहिए

(जोर खान)

पीछे की संगतता को बनाए रखने और संक्रमण आसान बनाने के लिए, पुराने प्रारूप को अब के लिए जगह में छोड़ दिया गया है। मूल पीईपी 3101 प्रस्ताव से :

पिछेड़ी संगतता

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

नोट करें कि जब तक यह पुराने सिस्टम को नाकाम करने का समय आता है ; इसे नापसंद नहीं किया गया है, लेकिन जब भी आप नया कोड लिखते हैं तब नई प्रणाली का उपयोग किया जाता है

नई प्रणाली एक लाभ के रूप में है जिसे आप पुराने % फॉर्मेटर के टपल और शब्दकोश दृष्टिकोण को जोड़ सकते हैं :

 "{greeting}, {0}".format(world, greeting='Hello') 

और object.__format__() हुक के माध्यम से एक्स्टेंसिबल है जिसे व्यक्तिगत मानों के स्वरूपण को संभालने के लिए इस्तेमाल किया जाता है।

ध्यान दें कि पुरानी व्यवस्था में % और Template वर्ग था, जहां बाद में आपको उपवर्ग बनाने की अनुमति मिलती है जो उसके व्यवहार को जोड़ या बदल देती है। नई-शैली प्रणाली में एक ही स्थान को भरने के लिए Formatter क्लास है।

स्ट्रिंग फ़ॉर्मेटिंग के लिए % ऑपरेटर को नापसंद नहीं किया गया है, और इसे हटाया नहीं जा रहा है – अन्य उत्तरों के बावजूद।
हर बार जब विषय अजगर विकास सूची पर उठाया जाता है, तो मजबूत विवाद होता है जिस पर बेहतर होता है, लेकिन क्लासिक तरीके को हटाने के लिए कोई विवाद नहीं है – यह रह जाएगा पीईपी 3101 पर चिह्नित होने के बावजूद, पायथन 3.1 आ गया और चला गया, और % फ़ॉर्मेट अभी भी आसपास है।

क्लासिक शैली रखने के लिए बयान स्पष्ट हैं: यह सरल है, यह तेज़ है, छोटी बातों के लिए यह जल्दी करना है .format विधि का प्रयोग हमेशा अधिक पठनीय नहीं है – और मूल डेवलपर्स के बीच में से किसी को भी – संदर्भ द्वारा ध्यान देने के लिए बिना .format किए गए पूरे वाक्यरचना का उपयोग कर सकते हैं। 2009 में वापस भी, इस तरह के संदेश थे: http: //mail.python.org/pipermail/python-dev/2009-October/092529.html – इस विषय को केवल सूचियों में से ही दिखाया गया है।

2016 अपडेट करें

मौजूदा पायथन विकास संस्करण में (जो पायथन 3.6 बन जाएगा) पीईपी -4 9 8 पर वर्णित स्ट्रिंग प्रक्षेप का तीसरा तरीका है। यह एक नया उद्धरण उपसर्ग f"" (वर्तमान u"" अलावा, b"" और r"" ) को परिभाषित करता है।

f द्वारा एक स्ट्रिंग प्रीफ़िक्स करना, रनटाइम पर स्ट्रिंग ऑब्जेक्ट पर एक विधि कॉल करेगी, जो स्वचालित रूप से वर्तमान गुंजाइश से स्ट्रिंग में चर उत्पन्न कर देगा:

 >>> value = 80 >>> f'The value is {value}.' 'The value is 80.' 

पुराने पायथन डॉक्स और पीईपी 3101 को देखते हुए एक वक्तव्य था कि% ऑपरेटर को भविष्य में भाषा से हटा दिया जाएगा और निकाल दिया जाएगा। निम्नलिखित कथन पायथन 3.0, 3.1, और 3.2 के लिए पायथन डॉक्स में था:

चूंकि str.format () काफी नया है, बहुत से पायथन कोड अभी भी% ऑपरेटर का उपयोग करता है। हालांकि, क्योंकि स्वरूपण की इस पुरानी शैली को अंततः भाषा से निकाल दिया जाएगा, str.format () आमतौर पर इस्तेमाल किया जाना चाहिए।

यदि आप Python 3.3 और 3.4 डॉक्स में एक ही अनुभाग में जाते हैं, तो आप देखेंगे कि कथन हटा दिया गया है। मुझे यह भी पता चलता है कि ऑपरेटर को भाषा से घिस या हटा दिया जाएगा। यह भी ध्यान देना महत्वपूर्ण है कि PEP3101 को ढाई साल (शुक्र, 30 सितंबर 2011) में संशोधित नहीं किया गया है।

अद्यतन करें

PEP461 % स्वरूपण को बाइट्स और बाइटियर को जोड़ना स्वीकार किया गया है और इसे पायथन 3.5 या 3.6 का हिस्सा होना चाहिए। यह एक और संकेत है कि% ऑपरेटर जीवित है और लात मार रहा है।

इस पर गिडो की नवीनतम स्थिति यहां संकेत की जा रही है:

पायथन 3.0 में नया क्या है

PEP 3101: स्ट्रिंग फ़ॉर्मेटिंग के लिए एक नया दृष्टिकोण

अंतर्निहित स्ट्रिंग स्वरूपण संचालन के लिए एक नई प्रणाली% स्ट्रिंग फ़ॉर्मेटिंग ऑपरेटर को बदल देती है। (हालांकि,% ऑपरेटर अभी भी समर्थित है, इसे पायथन 3.1 में पदावनत किया जाएगा और कुछ बाद के समय में भाषा से निकाल दिया जाएगा।) पूर्ण स्कूप के लिए पीईपी 3101 पढ़ें।

और पीईपी 3101 ही, जिसकी आखिरी बार संशोधित डेटिंग (शुक्र, 30 सितंबर 2011) है, इसलिए उस पर देर से कोई प्रगति नहीं हुई, मुझे लगता है