स्ट्रिंग स्वरूपण नामित पैरामीटर?


134

मुझे पता है कि यह एक बहुत ही सरल प्रश्न है, लेकिन मुझे यह पता नहीं है कि इसे Google कैसे बनाया जाए

मैं कैसे कर सकता हूँ

print '<a href="%s">%s</a>' % (my_url)

तो यह my_urlदो बार प्रयोग किया जाता है? मुझे लगता है कि मुझे "नाम" देना है %sऔर फिर परमेस में एक तानाशाही का उपयोग करना है, लेकिन मैं उचित वाक्यविन्यास के बारे में निश्चित नहीं हूं?


बस FYI करें, मुझे मालूम है कि मैं सिर्फ my_urlदो बार पारम्स में उपयोग कर सकता हूं , लेकिन यह बात नहीं है :)


प्रश्न का शीर्षक थोड़ा भ्रामक है। इसका प्रिंट स्टेटमेंट से कोई लेना-देना नहीं है, बस स्ट्रिंग इंटरपोल कैसे काम करता है।
ग्रेग बॉल

जब आपके पास यह जानने का कोई तरीका नहीं है कि इसे Google कैसे करें, तो खोज का उपयोग करने के लिए यहां जाएं: python.org/doc । यह एक महत्वपूर्ण कारण के लिए Google से बेहतर है।
एस.लॉट

जवाबों:


79

पायथन 2.6+ और पायथन 3 में, आप नए स्ट्रिंग प्रारूपण विधि का उपयोग करना चुन सकते हैं।

print('<a href="{0}">{0}</a>'.format(my_url))

जो आपको तर्क को दोहराने से बचाता है, या

print('<a href="{url}">{url}</a>'.format(url=my_url))

यदि आप नामित पैरामीटर चाहते हैं।

print('<a href="{}">{}</a>'.format(my_url, my_url))

जो कड़ाई से स्थितीय है, और केवल उस प्रारूप के साथ आता है जो प्रारूप () तर्क पायथन नियमों का पालन करते हैं, जहां अनाम आर्ग्स पहले आना चाहिए, उसके बाद नामित तर्क, इसके बाद * आर्ग्स (सूची या तुगलकी जैसा एक क्रम) और फिर कवर्स (एक तानाशाह) तार के साथ यदि आप जानते हैं कि आपके लिए क्या अच्छा है)। प्रक्षेप बिंदु उनके लेबल पर नामित मानों को प्रतिस्थापित करके पहले निर्धारित किए जाते हैं, और फिर जो बचे हैं उससे स्थिति। तो, आप यह भी कर सकते हैं ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))

लेकिन यह नहीं ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))

++ से #
cod3monk3y

3
उपरोक्त विधि नामित स्ट्रिंग प्रारूपण के लिए नहीं है , हालांकि यह स्थितिगत स्ट्रिंग प्रारूपण है। तो यह वास्तव में इस सवाल का जवाब नहीं है।
जपज

"literal {arg1}".format(arg1="arg!")नामित प्रारूप, अजगर 3.5 के साथ काम करता है, जबकि terser f"literal {arg1}"अजगर 3.6 या नए, AFAIK में एक नए नवीनता है।
मार्कहु

218
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}

3
मैं '<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
क्वार्स के

11
मुझे आश्चर्य है कि आप उस विद्वान को क्यों पसंद करते हैं? मुझे आसानी से नहीं पता होगा कि
ओप

1
प्रलेखन कहते हैं कि यह नहीं है कि जब यह शुरू की गई थी, तो यह शायद सभी अजगर 2 संस्करणों में है।
इवगेनी सर्गेव

2
यदि आप कर सकते हैं तो प्रारूप () का उपयोग करें, यह बेहतर और अधिक स्थानों पर काम करता है। यदि आप जरूरी हैं तो% का उपयोग करें।
uchuugaka

39

पायथन में समाधान 3.6+

पायथन 3.6 शाब्दिक स्ट्रिंग प्रारूपण का परिचय देता है , ताकि आप किसी भी नामित पैरामीटर को दोहराए बिना नामित मापदंडों को प्रारूपित कर सकें:

print(f'<a href="{my_url:s}">{my_url:s}</a>')

यह मूल्यांकन करेगा my_url, इसलिए यदि यह परिभाषित नहीं है तो आपको मिल जाएगा NameError। वास्तव में, के बजायmy_url , आप एक मनमाना पायथन अभिव्यक्ति लिख सकते हैं, जब तक कि यह एक स्ट्रिंग का मूल्यांकन करता है (क्योंकि :sस्वरूपण कोड)। यदि आप एक अभिव्यक्ति के परिणाम के लिए एक स्ट्रिंग प्रतिनिधित्व चाहते हैं जो एक स्ट्रिंग नहीं हो सकता है, तो उसके :sद्वारा प्रतिस्थापित करें!s बस नियमित के साथ की तरह, पूर्व शाब्दिक स्ट्रिंग स्वरूपण।

शाब्दिक स्ट्रिंग प्रारूपण के विवरण के लिए, PEP 498 देखें , जहां इसे पहली बार पेश किया गया था।


1
वह पीईपी सभी फॉर्मेटर्स को कवर नहीं करता है; मुझे लगता है कि वे str.format के समान हैं जो यहाँ प्रलेखित है: docs.python.org/3.4/library/string.html#formatstrings
MPEN

6

आप वाक्य रचना के आदी हो जाएंगे।

साथ ही C # 6.0, EcmaScript डेवलपर्स ने भी इस सिंटेक्स को फेमिलियर किया है।

In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa

In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa

5

HTML पृष्ठों के निर्माण के लिए, आप एक टेम्प्लेटिंग इंजन का उपयोग करना चाहते हैं, न कि सरल स्ट्रिंग प्रक्षेप।


2
Django का टेम्प्लेटिंग इंजन आपके द्वारा किए जा रहे ईमेल के लिए आदर्श उपकरण भी साबित हो सकता है।
माइक ग्राहम

6
अपनी render()पद्धति से एक ईमेल निकाय बनाने के लिए आपको Django टेम्पलेट का उपयोग करने से क्या रोक रहा है ? कुछ भी नहीं कहता है कि आपको टेम्पलेट आउटपुट फीड करना होगा HttpResponse()। Django शर्मनाक बहुमुखी है।
माइक डीसिमोन

1
@ माइक: मैंने सोचा कि Django के पास इसके लिए एक समाधान भी हो सकता है, लेकिन मुझे यह अभी तक नहीं मिला था: p मैं शायद अपने ईमेल को टेम्पलेट्स में स्थानांतरित कर दूंगा! धन्यवाद। शायद मैं थक गया हूँ, लेकिन मैंने पाया है कि यह कुछ क्षेत्रों में बहुत कठोर है।
एमपीएन

2
@random लोग जो इन टिप्पणियों को पढ़ते हैं: इस बारे में अधिक विस्तार पाया कि यहाँ कैसे करें rossp.org/blog/2006/jul/11/sending-e-mails-templates
मपेन

1
प्रश्नों पर टिप्पणी करने के लिए, आप टिप्पणियों का उपयोग करना चाहते हैं, उत्तर नहीं।
suriv

2

साथ ही साथ शब्दकोश तरीका, निम्नलिखित प्रारूप को जानना उपयोगी हो सकता है:

print '<a href="%s">%s</a>' % (my_url, my_url)

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


मैंने अभी एक आदमी को यह सुझाव देने के लिए कहा :) उसने अपना पद हटा दिया। मुझे अब बुरा लगने लगा है। हां, मुझे पता है कि मैं यह कर सकता हूं, लेकिन यह वैसा नहीं था जैसा मैं देख रहा था। जैसा कि आपने कहा, यह निरर्थक है, और my_urlवास्तव में एक फ़ंक्शन कॉल है जिसका मुझे दो बार मूल्यांकन करने की आवश्यकता नहीं है। दो बार इतना बुरा नहीं है, लेकिन यह आसानी से 20 गुना हो सकता है :)
MPen

5
मुझे लगा कि मैं इसे अपने पास रखूंगा, बस अगर यह किसी और की मदद करे। खैर शब्दकोश रास्ता जाने की संभावना सबसे अच्छा तरीका है। लेकिन अतिरेक के लिए, (get_my_url(), )*20केवल एक बार फ़ंक्शन को कॉल करता है, और इसे 20 बार दोहराता है।
पोंकडूडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.