पायथन में मल्टीलिन एफ-स्ट्रिंग


86

मैं एक घरेलू परियोजना के लिए पीईपी -8 अनुरूप कोड लिखने की कोशिश कर रहा हूं (मुझे यह स्वीकार करना चाहिए कि वे अजगर दुनिया में मेरे पहले कदम हैं) और मुझे एक एफ-स्ट्रिंग मिली है जो 80 से अधिक चार लंबी है

- self.text पर डॉट के पास ठोस पतली रेखा 80 char का निशान है। (बिना पूर्वावलोकन के दुखद लिंक के लिए क्षमा करें, लेकिन मुझे उन्हें पोस्ट करने के लिए 10+ प्रतिनिधि होना चाहिए)

मैं सबसे में अलग लाइनों में विभाजित करने के लिए कोशिश कर रहा हूँ pythonic तरीका है, लेकिन केवल कि वास्तव में काम करता है aswer मेरी लिंटर के लिए एक त्रुटि है

काम कोड:

def __str__(self):
    return f'{self.date} - {self.time},\nTags:' + \
    f' {self.tags},\nText: {self.text}'

आउटपुट:

2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text

लिंटर सोचता है कि मैं पीईपी -8 से ई 122 का सम्मान नहीं कर रहा हूं, क्या स्ट्रिंग को सही और कोड का अनुपालन करने का एक तरीका है?


1
या बस अपने आईडीई सब एक साथ पंक्ति सीमा से बढ़ाने के लिए, या अनदेखी करने के लिए है कि नियम बता
Joran बीस्ले

21
मुझे नहीं लगता कि इसका कोई ठप्पा है .. fस्ट्रिंग्स की चर्चा नहीं है।
Ma0

3
@JoshLee "E122 की निरंतरता की अनुपस्थिति या अनुपस्थित मुख्य लाइन" भी क्यों आपने प्रश्न को बंद कर दिया? कोई डुप्लिकेट नहीं हैं, इसका बहुभाषी एफ-स्ट्रिंग्स के बारे में एकमात्र है
उल्लू

2
@Owzy क्या इसका उत्तर ठीक वैसा ही नहीं है: कोष्ठक का उपयोग करें, रेखा-निरंतरता मार्कर का नहीं?
निक टी

8
इस सवाल को कभी भी एक डुप के रूप में बंद नहीं किया जाना चाहिए था, क्योंकि लिंक किए गए 'ड्यूप' इस सवाल का एक डुप नहीं है। Stackoverflow बिजली उपयोगकर्ताओं आप जानते हैं कि हम होने के बारे में कोई समस्या आती है भी इस तरह आक्रामक, इसे फिर से खोला। फिर से खुले वोट ASAP कास्टिंग।
उरदा

जवाबों:


98

पायथन कोड के लिए स्टाइल गाइड से :

कोष्ठक, कोष्ठक और ब्रेस के अंदर पायथन की निहित रेखा निरंतरता का उपयोग करके लंबी लाइनों को लपेटने का पसंदीदा तरीका है।

इसे देखते हुए, निम्नलिखित आपकी समस्या को पीईपी -8 के अनुरूप तरीके से हल करेगा।

return (
    f'{self.date} - {self.time}\n'
    f'Tags: {self.tags}\n'
    f'Text: {self.text}'
)

जब अल्पविराम द्वारा अलग नहीं किया जाता है, तो पायथन तार स्वचालित रूप से अलग हो जाएगा, इसलिए आपको स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है join()


40

मुझे लगता है कि यह होगा

return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''

अब है कि इसके बंद कर दिया मैं इस उत्तर को हटा सकते हैं, तो लोगों को लगता है मैं चाहिए ... लेकिन इसकी शिकार जवाब में शामिल नहीं: / \
Joran बीस्ले

8
लेकिन इस तरह की मल्टीलाइन एफ-स्ट्रिंग्स और इंडेंटेशन के उद्देश्य को हरा देती है और साथ ही मुझे यह महसूस नहीं होता है कि यह ट्रिपल उद्धरण स्ट्रिंग्स का सही उपयोग है, एक हैक की तरह महसूस करता है
Owlzy

2
हालांकि यह उत्तर ओपी के इरादे को दोहराता है, मुझे लगता है कि @ नोड्डी का उत्तर बेहतर है। यह उत्तर सही होने के लिए होता है क्योंकि ओपी भी आउटपुट में मल्टी-लाइन चाहता था। यदि आप चाहते थे कि आउटपुट सोर्स कोड की तुलना में एक अलग लेआउट हो, तो ट्रिपल उद्धरण जाने का रास्ता नहीं है।
माइक विलियम्सन

10

आप तिहरे एकल उद्धरण चिह्नों या तिहरे दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं, लेकिन स्ट्रिंग की शुरुआत में एक एफ डालें:

ट्रिपल सिंगल कोट्स

return f'''{self.date} - {self.time},
Tags:' {self.tags},
Text: {self.text}'''

ट्रिपल डबल कोट्स

return f"""{self.date} - {self.time},
Tags:' {self.tags},
Text: {self.text}"""

ध्यान दें कि आपको "\ n" का उपयोग करने की आवश्यकता नहीं है क्योंकि आप कई-लाइन स्ट्रिंग का उपयोग कर रहे हैं।


8

जैसा कि @noddy द्वारा उल्लेख किया गया है, दृष्टिकोण चर असाइनमेंट अभिव्यक्ति के लिए भी काम करता है:

var1 = "foo"
var2 = "bar"
concat_var = (f"First var is: {var1}"
              f" and in same line Second var is: {var2}")
print(concat_var)

आपको देना चाहिए:

First var is: foo and in same line Second var is: bar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.