पायथन 3 में स्ट्रिंग प्रारूपण


114

मैं इसे पायथन 2 में करता हूं:

"(%d goals, $%d)" % (self.goals, self.penalties)

इसका 3 संस्करण पायथन क्या है?

मैंने ऑनलाइन उदाहरणों की खोज करने की कोशिश की लेकिन मुझे पायथन 2 संस्करण मिलते रहे।


इसे पदावनत नहीं किया गया था; आपका कोड ठीक काम करता है और अधिक पढ़ें यहाँ
जैककोगिल

32
आकस्मिक पाठक के लिए ध्यान दें: डॉलर चिह्न का कोई विशेष अर्थ नहीं है। यह केवल एक डॉलर का संकेत है। (धन्यवाद मार्टिज़न पीटरर्स)
केविनरपे

1
pyformat.info और python-course.eu/python3_formatted_output.php (मेरी साइटें नहीं)
क्रिस्टोफ़

1
डॉलर के संकेत ने इसे बहुत भ्रमित कर दिया ..
cchamberlain

जवाबों:


173

यहां "नए" प्रारूप सिंटैक्स के बारे में डॉक्स दिए गए हैं । एक उदाहरण होगा:

"({:d} goals, ${:d})".format(self.goals, self.penalties)

यदि दोनों goalsऔर penaltiesपूर्णांकों (यानी उनके डिफ़ॉल्ट प्रारूप ठीक है), यह करने के लिए छोटा किया जा सकता है कर रहे हैं:

"({} goals, ${})".format(self.goals, self.penalties)

और चूंकि पैरामीटर क्षेत्र के होते हैं self, इसलिए दो बार एकल तर्क का उपयोग करके इसे करने का एक तरीका भी है (जैसा कि @Burhan खालिद ने टिप्पणियों में उल्लेख किया है):

"({0.goals} goals, ${0.penalties})".format(self)

व्याख्या:

  • {} डिफ़ॉल्ट प्रारूप के साथ बस अगले स्थितीय तर्क का मतलब है;
  • {0}सूचकांक के साथ तर्क का मतलब है 0, डिफ़ॉल्ट प्रारूप के साथ;
  • {:d} दशमलव पूर्णांक प्रारूप के साथ अगला स्थिति तर्क है;
  • {0:d}सूचकांक के साथ तर्क है 0, दशमलव पूर्णांक प्रारूप के साथ।

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

"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)

"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)

"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'

"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'

"games: {:>3}".format(player1.games)  # 'games: 123'
"games: {:>3}".format(player2.games)  # 'games:   4'
"games: {:0>3}".format(player2.games) # 'games: 004'

नोट: जैसा कि अन्य ने बताया, नया प्रारूप पूर्व को सुपरसेड नहीं करता है, दोनों पायथन 3 और पायथन 2 के नए संस्करणों के साथ-साथ दोनों में उपलब्ध हैं। कुछ लोग इसे वरीयता का विषय कह सकते हैं, लेकिन IMHO नए पुराने की तुलना में बहुत अधिक अभिव्यंजक है, और इसका उपयोग जब भी नया कोड लिखना होता है (जब तक कि यह पुराने वातावरण को लक्षित नहीं करता है, तो निश्चित रूप से)।


9
आप यह भी कर सकते हैं"({0.goals} goals, ${0.penalties})".format(self)
बुरहान खालिद

आपको घुंघराले ब्रेस के बाहर '%' लेने की जरूरत है, जैसे {: .2f%} -> {: .2f}%
SuperElectric

@SuperElectric का अर्थ है, इस पंक्ति में "conversion rate: {:.2%}".format(self.goals / self.shots):? मेरे लिए ठीक काम करता है क्योंकि यह है ... (पायथन 3.4) ध्यान दें कि इसमें कोई भी नहीं fहै, मैं एक प्रतिशत के रूप में प्रारूप करने के लिए कह रहा हूं, एक अस्थायी बिंदु संख्या के रूप में नहीं।
mgibsonbr

आप सही हे; यह पायथन 3.4 में काम करता है, इसलिए यह ठीक है क्योंकि ओपी पायथन 3 के बारे में पूछ रहा था। मैं सिर्फ यह अजगर 2.7.6 के साथ काम नहीं किया पाया। "{:.2f}%".format(float_num)दोनों के लिए ठीक काम करता है।
17

1
@ जॉन्शमिट हां, यह उदाहरण प्रश्न में दिए गए कोड के समान सटीक आउटपुट देने वाला था। यहाँ $इसका कोई विशेष अर्थ नहीं है, न तो पुराने प्रारूप के सिंटैक्स में और न ही नए में, इस प्रकार उत्पन्न स्ट्रिंग में मौजूद होना चाहिए, अपरिवर्तित।
mgibsonbr

67

अजगर 3.6 अब PEP 498 के साथ शॉर्टहैंड शाब्दिक स्ट्रिंग प्रक्षेप का समर्थन करता है । आपके उपयोग के मामले में, नया सिंटैक्स बस है:

f"({self.goals} goals, ${self.penalties})"

यह पिछले .formatमानक के समान है , लेकिन किसी को आसानी से ऐसा करने देता है जैसे :

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result:      12.35'

12

यह पंक्ति पाइथन 3 में काम करती है।

>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'

ठीक है। ठंडा। प्रश्न पोस्ट करने के बाद, मैं अपनी खोज जारी रखे हुए था और पाया कि हमें {% d} करना है बजाय% d कि क्या यह सही है, भी? या Python2 इसे करने का एकमात्र तरीका है?
जोसबज़ाज़

2
अजगर 3 एक नया वाक्यविन्यास पेश करता है - जो घुंघराले ब्रेसिज़ है - लेकिन आपको इसका उपयोग करने की आवश्यकता नहीं है। आप या तो पुराने या नए का उपयोग कर सकते हैं। लेकिन वे अलग हैं; यदि आप कर्ल का उपयोग कर रहे हैं, तो आप प्रतिशत संकेतों का उपयोग नहीं करते।
मार्क रीड रीड

2

मुझे यह तरीका पसंद है

my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)

क्रमशः कोष्ठक में संलग्न d और s पर ध्यान दें।

आउटपुट होगा:

I scored 3 goals and took 5 penalties
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.