जवाबों:
मार्क सिडेड का जवाब सही है - आपको एक टपल की आपूर्ति करने की आवश्यकता है।
हालाँकि पाइथन 2.6 के बाद से आप formatइसके बजाय उपयोग कर सकते हैं %:
'{0} in {1}'.format(unicode(self.author,'utf-8'), unicode(self.publication,'utf-8'))
%स्ट्रिंग्स को प्रारूपित करने के लिए उपयोग को प्रोत्साहित नहीं किया जाता है।
स्ट्रिंग स्वरूपण की यह विधि पायथन 3.0 में नया मानक है, और इसे नए कोड में स्ट्रिंग स्वरूपण संचालन में वर्णित% स्वरूपण के लिए प्राथमिकता दी जानी चाहिए।
यदि आप एक से अधिक तर्क का उपयोग कर रहे हैं, तो इसे टपल में होना चाहिए (अतिरिक्त कोष्ठकों पर ध्यान दें):
'%s in %s' % (unicode(self.author), unicode(self.publication))
जैसा कि EOL बताता है, unicode()फ़ंक्शन आमतौर पर ascii एन्कोडिंग को एक डिफ़ॉल्ट मानता है, इसलिए यदि आपके पास गैर-ASCII वर्ण हैं, तो यह स्पष्ट रूप से एन्कोडिंग को पारित करने के लिए सुरक्षित है:
'%s in %s' % (unicode(self.author,'utf-8'), unicode(self.publication('utf-8')))
और पायथन 3.0 के रूप में, इसके str.format()बजाय सिंटैक्स का उपयोग करना पसंद किया जाता है:
'{0} in {1}'.format(unicode(self.author,'utf-8'),unicode(self.publication,'utf-8'))
formatनिम्नलिखित प्रलेखन से अंश है:
यह देखते हुए
format % values,%रूपांतरण विशिष्टताओं मेंformatकी शून्य या अधिक तत्वों के साथ बदल दिया जाता हैvalues। प्रभावsprintf()सी भाषा में उपयोग के समान है ।यदि
formatकिसी एकल तर्क की आवश्यकता है, तो मान एक एकल गैर-तुच्छ वस्तु हो सकते हैं। अन्यथा, मानformatस्ट्रिंग द्वारा निर्दिष्ट वस्तुओं की संख्या , या एकल मैपिंग ऑब्जेक्ट (उदाहरण के लिए, एक शब्दकोश) के साथ टपल होना चाहिए ।
str.formatबजाय पर%%ऑपरेटर के लिए एक नया विकल्प उपयोग करना है str.format। यहाँ प्रलेखन से एक अंश है:
str.format(*args, **kwargs)एक स्ट्रिंग स्वरूपण ऑपरेशन करें। जिस स्ट्रिंग पर यह विधि कहा जाता है, उसमें शाब्दिक पाठ या प्रतिस्थापन फ़ील्ड ब्रेसिज़ द्वारा सीमांकित हो सकते हैं
{}। प्रत्येक प्रतिस्थापन फ़ील्ड में या तो स्थितीय तर्क का संख्यात्मक सूचकांक होता है, या कीवर्ड तर्क का नाम होता है। स्ट्रिंग की एक प्रति लौटाता है जहां प्रत्येक प्रतिस्थापन फ़ील्ड को इसी तर्क के स्ट्रिंग मान से बदल दिया जाता है।यह विधि पायथन 3.0 में नया मानक है, और इसे
%स्वरूपण के लिए प्राथमिकता दी जानी चाहिए ।
यहाँ कुछ उपयोग उदाहरण हैं:
>>> '%s for %s' % ("tit", "tat")
tit for tat
>>> '{} and {}'.format("chicken", "waffles")
chicken and waffles
>>> '%(last)s, %(first)s %(last)s' % {'first': "James", 'last': "Bond"}
Bond, James Bond
>>> '{last}, {first} {last}'.format(first="James", last="Bond")
Bond, James Bond
'{self.author} in {self.publication}'.format(self=self)होना चाहिए जो "काम" करे। मुझे पूरी unicodeबात पर यकीन नहीं है ।
{first[0]}प्रारंभिक प्राप्त करने के लिए उपयोग कर सकते थे J।
आपको मानों को केवल कोष्ठकों में रखना होगा:
'%s in %s' % (unicode(self.author), unicode(self.publication))
यहाँ, पहले के लिए रखा जाएगा। और दूसरे के लिए , इच्छा का उपयोग किया जाएगा।%sunicode(self.author)%sunicode(self.publication)
ध्यान दें: आप के पक्ष में होना चाहिए
string formattingसे अधिक%संकेतन। अधिक जानकारी यहाँ
%sतो बजायformat
अब तक पोस्ट किए गए कुछ उत्तरों के साथ एक महत्वपूर्ण समस्या है: unicode()डिफ़ॉल्ट एन्कोडिंग से डीकोड, जो अक्सर ASCII है; वास्तव में, unicode()यह बाइट्स की "समझ" बनाने की कोशिश करता है, जो उन्हें पात्रों में परिवर्तित करके दिया जाता है। इस प्रकार, निम्नलिखित कोड, जो अनिवार्य रूप से पिछले उत्तरों द्वारा अनुशंसित है, मेरी मशीन पर विफल रहता है:
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
देता है:
Traceback (most recent call last):
File "test.py", line 3, in <module>
print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
विफलता इस तथ्य से आती है authorजिसमें केवल ASCII बाइट्स नहीं होते हैं (अर्थात [0; 127] में मूल्यों के साथ), और unicode()डिफ़ॉल्ट रूप से ASCII से डिकोड (कई मशीनों पर)।
एक मजबूत समाधान स्पष्ट रूप से आपके क्षेत्रों में उपयोग किए गए एन्कोडिंग को देना है; उदाहरण के रूप में UTF-8 लेना:
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(या प्रारंभिक के बिना u, इस पर निर्भर करता है कि आप एक यूनिकोड परिणाम या बाइट स्ट्रिंग चाहते हैं)।
इस बिंदु पर, कोई व्यक्ति फॉर्मेटिंग के दौरान उन्हें डिकोड करने के बजाय, उन फ़ील्ड्स authorऔर publicationफ़ील्ड्स को यूनिकोड स्ट्रिंग्स होने पर विचार कर सकता है।
Python2 के लिए आप यह भी कर सकते हैं
'%(author)s in %(publication)s'%{'author':unicode(self.author),
'publication':unicode(self.publication)}
यदि आपके पास स्थानापन्न करने के लिए बहुत सारे तर्क हैं (विशेषकर यदि आप अंतर्राष्ट्रीयकरण कर रहे हैं)
Python2.6 आगे की ओर समर्थन करता है .format()
'{author} in {publication}'.format(author=self.author,
publication=self.publication)
पूर्णता के लिए, अजगर में 3.6 एफ-स्ट्रिंग PEP-498 में पेश किए जाते हैं । ये तार इसे संभव बनाते हैं
न्यूनतम सिंटैक्स का उपयोग करते हुए, स्ट्रिंग शाब्दिक के अंदर अभिव्यक्ति एम्बेड करें।
इसका मतलब यह होगा कि आपके उदाहरण के लिए भी आप उपयोग कर सकते हैं:
f'{self.author} in {self.publication}'
'{} in {}'प्रारूप स्ट्रिंग का उपयोग कर सकता है ।