दिलचस्प पोस्ट
मैं कैसे पायथन में शब्दकोश के मूल्यों से शब्दकोशों की एक सूची को सॉर्ट कर सकता हूं? एंड्रॉइड काम नहीं करने के लिए दृश्य स्टूडियो (2015) एमुलेटर – XDE.exe – बाहर निकलें कोड 3 कैसे SKSpriteNode को फेंकने के लिए? पायथन 2.7 के लिए सी मॉड्यूल के निर्माण / स्थापना के दौरान त्रुटियां गिट – 'मान-अपरिवर्तित' और 'स्काइप-वर्कट्री' के बीच अंतर एक बाहरी वेबपेज को HTML पेज पर एक div में कैसे लोड किया जाता है कंसोल अनुप्रयोग के लिए "बाहर निकलें" 'लॉग' और 'सिमोल' के बीच अंतर क्या है? एक पृष्ठभूमि कार्य या सेवा से वर्तमान अग्रभूमि अनुप्रयोग का निर्धारण करना रिक्त स्थान वाले JSON ऑब्जेक्ट की पहुंच एक संख्या के लिए सेंट, एनडी, आरडी और वें (ऑर्डरिन) प्रत्यय जोड़ें एक SQL सर्वर VARCHAR / NVARCHAR स्ट्रिंग में एक लाइन ब्रेक कैसे सम्मिलित करें मैं जावास्क्रिप्ट में स्पैन तत्व का पाठ कैसे बदल सकता हूँ डेटा एक्सेस परत डिजाइन पैटर्न HttpInterceptor और AngularJS 1.1.5 का उपयोग कर लोडिंग स्पिनर को लागू करना

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

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

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 भी देखेंः स्ट्रिंग इंपोलेशन – विस्तारित चर्चा

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

नया .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) है, इसलिए उस पर देर से कोई प्रगति नहीं हुई, मुझे लगता है