मैं इनलाइन चर के साथ एक बहु-पायथन स्ट्रिंग कैसे बनाऊं?


102

मैं एक बहुस्तरीय पायथन स्ट्रिंग के भीतर चर का उपयोग करने के लिए एक स्वच्छ तरीके की तलाश कर रहा हूं। कहो मैं निम्नलिखित करना चाहता था:

string1 = go
string2 = now
string3 = great

"""
I will $string1 there
I will go $string2
$string3
"""

मैं यह देखने के लिए देख रहा हूं $कि पायथन सिंटैक्स में एक चर को इंगित करने के लिए पर्ल में कुछ समान है या नहीं ।

यदि नहीं - चर के साथ एक बहुस्तरीय स्ट्रिंग बनाने का सबसे साफ तरीका क्या है?

जवाबों:


157

सामान्य तरीका format()फ़ंक्शन है:

>>> s = "This is an {example} with {vars}".format(vars="variables", example="example")
>>> s
'This is an example with variables'

यह बहु-पंक्ति प्रारूप स्ट्रिंग के साथ ठीक काम करता है:

>>> s = '''\
... This is a {length} example.
... Here is a {ordinal} line.\
... '''.format(length='multi-line', ordinal='second')
>>> print(s)
This is a multi-line example.
Here is a second line.

तुम भी चर के साथ एक शब्दकोश पारित कर सकते हैं:

>>> d = { 'vars': "variables", 'example': "example" }
>>> s = "This is an {example} with {vars}"
>>> s.format(**d)
'This is an example with variables'

आपके द्वारा पूछे गए (सिंटैक्स के संदर्भ में) निकटतम बात टेम्पलेट स्ट्रिंग हैं । उदाहरण के लिए:

>>> from string import Template
>>> t = Template("This is an $example with $vars")
>>> t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'

मुझे यह जोड़ना चाहिए कि यह format()फ़ंक्शन अधिक सामान्य है क्योंकि यह आसानी से उपलब्ध है और इसे आयात लाइन की आवश्यकता नहीं है।


2
प्रश्न में शब्दकोश के रूप में vars()या उपयोग कर सकते हैंlocals()
इस्माइल बदावी

2
@isbadawi Explicit निहितार्थ से बेहतर है। केवल आपकी जरूरत के चर में पास होना बेहतर है। यदि आपको नहीं पता है कि आपको किसकी आवश्यकता है, क्योंकि स्ट्रिंग को उपयोगकर्ता द्वारा आपूर्ति की जाती है, dictवैसे भी "चर" आइटम होना चाहिए ।
एएफएफ

दूसरा समाधान सबसे साफ आईएमओ है। मल्टीलाइन स्टिंग के भीतर शब्दकोश से स्पष्ट चर नाम के साथ शब्दकोश। मैं इस विधि का उपयोग करूंगा। धन्यवाद। नीचे महान जवाब के भार भी लेकिन यह एकदम सही था।
विकास

@SimeonVisser, "string" .format (...) लीगेसी पायथन संस्करणों (जैसे 2.4) पर मान्य नहीं है
Oz123

यदि घुंघराले ब्रेसिज़ का उपयोग कर रहे हैं, तो उन्हें भागने की जरूरत है {{this}}
जॉनी

53

नोट : पायथन में स्ट्रिंग प्रारूपण करने के लिए अनुशंसित तरीका है format(), जैसा कि स्वीकृत उत्तर में उल्लिखित है । मैं इस उत्तर को सी-स्टाइल सिंटैक्स के उदाहरण के रूप में संरक्षित कर रहा हूं जो कि समर्थित है।

# NOTE: format() is a better choice!
string1 = "go"
string2 = "now"
string3 = "great"

s = """
I will %s there
I will go %s
%s
""" % (string1, string2, string3)

print(s)

कुछ पढ़ना:


2
यह वास्तव में ऐसा नहीं है क्योंकि ओपी नामित मापदंडों को चाहता है, न कि स्थितिगत।
इस्माइल बदावी

2
यह अभी भी एक अच्छा समाधान है, और बहु-रेखा प्रक्षेप के लिए यह अधिक प्रत्यक्ष है। आपको कुछ भी आयात करने की आवश्यकता नहीं है और यह नियमित रूप से अजगर इंटरपोलेशन का उपयोग करता है।
10

4
" आप शायद इस बात का थोड़ा सा
गुग्लिंग के

32

आप मल्टी-लाइन या लम्बी सिंगल-लाइन स्ट्रिंग्स के अंदर चर के लिए पायथन 3.6 के एफ-स्ट्रिंग्स का उपयोग कर सकते हैं । आप मैन्युअल रूप से न्यूलाइन वर्णों का उपयोग करके निर्दिष्ट कर सकते हैं ।\n

बहु-पंक्ति स्ट्रिंग में चर

string1 = "go"
string2 = "now"
string3 = "great"

multiline_string = (f"I will {string1} there\n"
                    f"I will go {string2}.\n"
                    f"{string3}.")

print(multiline_string)

मैं वहां जाऊंगा
मैं अब
महान जाऊंगा

एक लंबी एकल-पंक्ति स्ट्रिंग में चर

string1 = "go"
string2 = "now"
string3 = "great"

singleline_string = (f"I will {string1} there. "
                     f"I will go {string2}. "
                     f"{string3}.")

print(singleline_string)

मेरे वहां जाना होगा। अब मै जाऊँगी। महान।


वैकल्पिक रूप से, आप ट्रिपल उद्धरणों के साथ एक बहु-एफ-स्ट्रिंग भी बना सकते हैं।

multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""

इससे आपका सोर्स कोड ठीक-ठाक दिख रहा है, और प्री-पायथन 3.6 में आप ऐसा करने से सिर्फ एक ही प्रभाव प्राप्त कर सकते हैं (कोष्ठक का अतिरिक्त सेट और कॉन्कैटनेट का उपयोग करके +): stackoverflow.com/a/54564926/4551887
गेब्रियल स्टेपल्स

ट्रिपल उद्धरण को काफी पसंद किया जाता है। आपको पहले वह फॉर्म पेश करना चाहिए।
jpmc26

@ jpmc26 मैंने कोड इंडेंटेशन के लिए पहले PEP 8 के दिशा-निर्देशों के आधार पर कोष्ठक-शैली प्रस्तुत की । ट्रिपल उद्धरण को क्यों प्राथमिकता दी जाएगी?
19-13 में स्टेवोइसाक

10

ये वो है जो तुम चाहते हो:

>>> string1 = "go"
>>> string2 = "now"
>>> string3 = "great"
>>> mystring = """
... I will {string1} there
... I will go {string2}
... {string3}
... """
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'string3': 'great', '__package__': None, 'mystring': "\nI will {string1} there\nI will go {string2}\n{string3}\n", '__name__': '__main__', 'string2': 'now', '__doc__': None, 'string1': 'go'}
>>> print(mystring.format(**locals()))

I will go there
I will go now
great

ध्यान दें कि ट्रिपल कोट्स """न्यूलाइन्स को संरक्षित करता है, जिसका अर्थ है कि पहले और बाद में एक अतिरिक्त न्यूलाइन हैmystring
स्टिवोइक

आप एक नई रूपरेखा बनाने से बचने के लिए ट्रिपल उद्धरण के अंदर एक बैकलैश का उपयोग कर सकते हैं .strip(), .rstrip()या कर सकते हैं .lstrip()। रहस्यमय = "" "\" एबीसी \ ""
हॉकोक

6

एक शब्दकोश को पारित किया जा सकता है format(), प्रत्येक कुंजी नाम प्रत्येक संबद्ध मूल्य के लिए एक चर बन जाएगा।

dict = {'string1': 'go',
        'string2': 'now',
        'string3': 'great'}

multiline_string = '''I'm will {string1} there
I will go {string2}
{string3}'''.format(**dict)

print(multiline_string)


साथ ही एक सूची को पारित किया जा सकता है format(), इस मामले में प्रत्येक मूल्य के सूचकांक संख्या को चर के रूप में उपयोग किया जाएगा।

list = ['go',
        'now',
        'great']

multiline_string = '''I'm will {0} there
I will go {1}
{2}'''.format(*list)

print(multiline_string)


उपरोक्त दोनों समाधान समान होंगे:

मैं वहां जाऊंगा
मैं अब
महान जाऊंगा


0

यदि कोई यहां अजगर-ग्रेफिक क्लाइंट से आया है जो किसी वस्तु को चर के रूप में पास करने के लिए एक समाधान की तलाश में है जो मैंने यहां उपयोग किया है:

query = """
{{
  pairs(block: {block} first: 200, orderBy: trackedReserveETH, orderDirection: desc) {{
    id
    txCount
    reserveUSD
    trackedReserveETH
    volumeUSD
  }}
}}
""".format(block=''.join(['{number: ', str(block), '}']))

 query = gql(query)

सभी घुंघराले ब्रेसिज़ से बचना सुनिश्चित करें जैसे मैंने किया था: "{{", "}}"


0

f- स्ट्रिंग्स , जिसे "स्वरूपित स्ट्रिंग शाब्दिक" भी कहा जाता है, fशुरुआत में एक स्ट्रिंग स्ट्रिंग हैं ; और घुंघराले ब्रेसिज़ वाले भावों को उनके मूल्यों के साथ बदल दिया जाएगा।

एफ-स्ट्रिंग्स का मूल्यांकन रनटाइम पर किया जाता है।

तो आपके कोड को फिर से लिखा जा सकता है:

string1="go"
string2="now"
string3="great"
print(f"""
I will {string1} there
I will go {string2}
{string3}
""")

और यह मूल्यांकन करेगा:

I will go there
I will go now
great

आप यहां इसके बारे में अधिक जान सकते हैं ।

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