2009-06-15 20 views
113

पायथन में% s का क्या अर्थ है? और कोड का निम्नलिखित बिट क्या करता है?पायथन में% s का क्या अर्थ है?

उदाहरण के लिए ...

if len(sys.argv) < 2: 
    sys.exit('Usage: %s database-name' % sys.argv[0]) 

if not os.path.exists(sys.argv[1]): 
    sys.exit('ERROR: Database %s was not found!' % sys.argv[1]) 
+3

'%' ऑपरेटर को अधिक शक्तिशाली' str.format' विधि के पक्ष में बहिष्कृत किया गया है, [PEP-3101] देखें (http://docs.python.org/3.1/whatsnew/2.6.html#pep -3101) –

+20

दरअसल कि पीईपी कहता है "पायथन 3.0 में,% ऑपरेटर को एक अधिक शक्तिशाली स्ट्रिंग स्वरूपण विधि द्वारा पूरक किया जाता है" और यह पाइथन 2.6 में बैकपोर्ट किया गया है। जहां से मैं "पूरक" से आया हूं, इसका मतलब है, प्रतिस्थापित नहीं किया गया है। पीईपी "सप्लायर" नहीं कहता है और पीईपी के किसी भी हिस्से में यह नहीं कहता है कि% ऑपरेटर को बहिष्कृत किया गया है (फिर भी यह कहता है कि अन्य चीजें नीचे नीचे गिरा दी गई हैं)। आप str.format पसंद कर सकते हैं और यह ठीक है, लेकिन जब तक कोई पीईपी कहता है कि इसे बहिष्कृत नहीं किया गया है, तो दावा करने में कोई समझ नहीं है कि यह तब नहीं है जब यह नहीं है। – Ben

उत्तर

138

यह एक स्ट्रिंग स्वरूपण वाक्य रचना (जो यह सी से उधार लेता है) है।

कृपया "Formatting Strings" देखें:

अजगर तार में स्वरूपण मूल्यों का समर्थन करता है। यद्यपि इसमें बहुत जटिल अभिव्यक्तियां शामिल हो सकती हैं, सबसे अधिक मूल उपयोग %s प्लेसहोल्डर के साथ स्ट्रिंग में मान डालने के लिए है।

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

name = raw_input("who are you?") 
print "hello %s" % (name,) 

%s टोकन मुझे (और संभवत: प्रारूप) एक स्ट्रिंग डालने के लिए अनुमति देता है: यहाँ एक बहुत ही सरल उदाहरण है। ध्यान दें कि %s टोकन को % प्रतीक के बाद स्ट्रिंग में जो कुछ भी पास किया गया है, उसे प्रतिस्थापित किया गया है। ध्यान दें कि मैं यहां एक टुपल का भी उपयोग कर रहा हूं (जब आपके पास केवल एक टुपल का उपयोग करके एक स्ट्रिंग होती है) यह स्पष्ट करने के लिए कि एकाधिक स्ट्रिंग्स को एक कथन में सम्मिलित और स्वरूपित किया जा सकता है।

+0

आप दोनों को धन्यवाद। बहुत उपयोगी! – Tyler

+0

स्वरूपण स्ट्रिंग्स लिंक – Sherlock

+5

चला गया है नोट करें कि इस प्रकार की स्ट्रिंग इंटरपोलेशन को अधिक शक्तिशाली 'str.format' विधि के पक्ष में बहिष्कृत किया गया है। –

8

'% s' पायथन की स्ट्रिंग स्वरूपण क्षमताओं का उपयोग करते समय 'स्ट्रिंग' के रूपांतरण प्रकार को इंगित करता है। अधिक विशेष रूप से, '% s' str() फ़ंक्शन का उपयोग करके एक निर्दिष्ट मान को एक स्ट्रिंग में परिवर्तित करता है। इसे '% r' रूपांतरण प्रकार से तुलना करें जो मूल्य रूपांतरण के लिए repr() फ़ंक्शन का उपयोग करता है।

पर एक नजर डालें निम्नलिखित: http://docs.python.org/library/stdtypes.html#string-formatting-operations

5

अपने दूसरे प्रश्न के जवाब में: क्या इस कोड को करता है ...

यह एक अजगर स्क्रिप्ट के लिए काफी मानक त्रुटि-जांच कोड है? कमांड लाइन तर्क स्वीकार करता है। अगर तुम मुझे एक तर्क पारित नहीं किया है, मैं तुम्हें बताने के लिए तुम मुझे कैसे भविष्य में एक तर्क पास करना चाहिए जैसे जा रहा हूँ:

तो सबसे पहले if बयान करने के लिए अनुवाद

Usage: myscript.py database-name 

अगले if बयान चेकों देखने के लिए कि 'डेटाबेस का नाम' आप स्क्रिप्ट के लिए पारित वास्तव में फाइल सिस्टम पर मौजूद है: यदि आप इस के लिए स्क्रीन पर दिखाई देगी।

ERROR: Database database-name was not found! 

documentation से:: यदि नहीं, तो आप इस तरह एक संदेश मिलेगा

argv [0] है स्क्रिप्ट नाम (यह ऑपरेटिंग सिस्टम निर्भर है कि क्या यह एक पूर्ण है पथनाम या नहीं)। आदेश को कमांड लाइन विकल्प दुभाषिया के लिए आदेश पंक्ति विकल्प का उपयोग करके निष्पादित किया गया था, argv [0] स्ट्रिंग '-c' पर सेट है। यदि कोई स्क्रिप्ट नाम पाइथन दुभाषिया को पास नहीं किया गया था, argv [0] खाली स्ट्रिंग है।

75

एंड्रयू का जवाब अच्छा है।

और बस तुम बाहर में थोड़ा और अधिक मदद करने के लिए, आपके द्वारा एक स्ट्रिंग

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike". 

में कई स्वरूपण का उपयोग आप स्ट्रिंग के बजाय ints का उपयोग कर रहे हैं, तो का उपयोग% s% d के बजाय है।

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12 
+2

अच्छा। % d आपको स्ट्रिंग (int) कास्टिंग से बचाता है। कोई विचार क्या% s और% d के लिए खड़ा है? मुझे लगता है कि मैं उन्हें स्ट्रिंग और अंक के रूप में याद रखूंगा। – user391339

+0

@ user391339 दशमलव के लिए खड़ा है :) वे सभी यहां हैं https://docs.python.org/2/library/stdtypes.html#string-formatting-operations – sqram

16

format विधि पायथन 2.6 में पेश की गई थी। यह अधिक सक्षम और उपयोग करने में अधिक कठिन नहीं है:

>>> "Hello {}, my name is {}".format('john', 'mike') 
'Hello john, my name is mike'. 

>>> "{1}, {0}".format('world', 'Hello') 
'Hello, world' 

>>> "{greeting}, {}".format('world', greeting='Hello') 
'Hello, world' 
+5

यह उत्तर बेहतर होगा यदि यह समझाया गया कि इसमें वाक्यविन्यास प्रश्न पाठ स्वरूपण कर रहा था और _then_ ने नई विधि का प्रदर्शन किया। इस तरह यह अपने आप पर खड़ा हो सकता है। एक उदाहरण प्रदान करना जो प्रश्न में उदाहरण के बराबर था, भी एक प्लस होगा। –

2

% s को विशेष रूप से तारों के लिए प्रारूप विनिर्देशक के रूप में जाना जाता है। चूंकि डेटा प्रकार पर चर्चा इस पुस्तक में जारी है, आप कई और देखें, प्रत्येक दिए गए डेटा प्रकार के लिए प्रत्येक विशिष्ट। प्रत्येक विनिर्देशक स्ट्रिंग में उस प्रकार के प्लेसहोल्डर के रूप में कार्य करता है; और स्ट्रिंग के बाद, स्ट्रिंग के के बाहर% संकेत इंगित करता है कि इसके बाद, प्रारूप विनिर्देशक में डाले जाने वाले सभी मान स्ट्रिंग में उपयोग किए जाने के लिए होंगे। आप कोष्ठक देख सकते हैं। यह स्ट्रिंग को बताता है कि इसे अनुक्रम देखने की उम्मीद करनी चाहिए कि में स्ट्रिंग द्वारा अपने प्रारूप विनिर्देशों को पॉप्युलेट करने के लिए उपयोग किए जाने वाले मान शामिल हैं। इसके बारे में सोचने का एक आसान तरीका यह कल्पना करना है कि% s एक भंडारण बिन है जो कोष्ठक में मान रखता है। यदि आप एक से अधिक मान करना चाहते हैं, तो आप इस तरीके से एक और प्रारूप विनिर्देशक, जोड़ देंगे:
">>>" जॉन% s% s "% (" हर "," मैन ")
जॉन एवरीमैन '

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