अजगर प्रारूप स्ट्रिंग में% s का क्या अर्थ है?


166

%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])

4
%ऑपरेटर और अधिक शक्तिशाली के पक्ष में पदावनत किया गया है str.formatविधि, देख पीईपी-3101
पाउलो स्कार्डिन

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

जवाबों:


198

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

कृपया "PyFormat" देखें :

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

संपादित करें: यहाँ एक बहुत सरल उदाहरण है:

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

#Python3+
name = input("who are you? ")
print("hello %s" % (name,))

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


11
ध्यान दें कि इस तरह के स्ट्रिंग प्रक्षेप को अधिक शक्तिशाली str.formatविधि के पक्ष में चित्रित किया गया है ।
पाउलो स्कार्डिन

6
Python3 में raw_input () अब केवल उन लोगों के लिए इनपुट () है जो आपके लिए प्रयास कर रहे हैं।
गोथबर्ज़

1
क्यों (name,)और क्या नहीं name?
कैमरून हडसन

111

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

और बस आपको कुछ और मदद करने के लिए, यहां बताया गया है कि कैसे आप एक स्ट्रिंग में कई फॉर्मेटिंग का उपयोग करते हैं

"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

1
@ user391339 दशमलव के लिए खड़ा है :) वे यहाँ सभी docs.python.org/2/library/…
sqram

मैं पहले के संस्करणों के लिए नहीं जानता, लेकिन कम से कम 3.6 के लिए यह उसी तरह काम करता है, भले ही आप %sपूर्णांक पर उपयोग करते हों, यह सिर्फ एक स्ट्रिंग में परिवर्तित हो जाएगा।
लैपिन

@ लपिन आप सही हैं :)। लेकिन यह हमेशा वह नहीं हो सकता जो आप चाहते हैं। उदाहरण के लिए, आप एक अंक को पैड करना चाहते हैं। print('This number will be padded with 4 zeros: %05d ' % 1)- यह काम करेगा। print('This number will be padded with 4 zeros: %05s ' % 1)- यह नहीं होगा
वर्गम

28

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'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'

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

13

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

स्ट्रिंग प्रारूपण के लिए डॉक्स पर एक नज़र डालें ।


13

%sतथा %d स्ट्रिंग्स / डेसीमल / फ़्लोट्स आदि को प्रारूपित करने के लिए प्रारूप विनिर्देशक या प्लेसहोल्डर हैं।

अधिकांश आम इस्तेमाल किया प्रारूप विनिर्देशक:

%s : स्ट्रिंग

%d : दशमलव

%f : तैरना

स्व व्याख्यात्मक कोड:

name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age))   #type(age): <class 'int'>   
print('type(IQ):', type(IQ))     #type(IQ): <class 'float'>   

print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))          # with help of older method

print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000          

#storing formattings in string

sub1 = "python string!"
sub2 = "an arg"

a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)

c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)

print(a)    # "i am a python string!"
print(b)   # "i am a python string!"
print(c)    # "with an arg!"
print(d)   # "with an arg!"

6

आपके दूसरे प्रश्न के उत्तर में: यह कोड क्या करता है? ...

यह पायथन स्क्रिप्ट के लिए काफी मानक त्रुटि-जाँच कोड है जो कमांड-लाइन तर्कों को स्वीकार करता है।

इसलिए पहला ifकथन इस बात का अनुवाद करता है: यदि आपने मुझे तर्क नहीं दिया है, तो मैं आपको बताने जा रहा हूं कि आपको भविष्य में मुझे कैसे तर्क देना चाहिए, जैसे कि आप इसे ऑन-स्क्रीन देखेंगे:

Usage: myscript.py database-name

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

ERROR: Database database-name was not found!

से प्रलेखन :

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


2

यहाँ पायथन 3 में एक अच्छा उदाहरण है।

  >>> a = input("What is your name?")
  What is your name?Peter

  >>> b = input("Where are you from?")
  Where are you from?DE

  >>> print("So you are %s of %s" % (a, b))
  So you are Peter of DE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.