2015-03-06 16 views
11

कभी कभी अजगर में एक त्रिगुट ऑपरेटर से युक्त एक लाइन बहुत लंबी हो जाता है:पायथन टर्नरी ऑपरेटर पर लाइन ब्रेक कैसे बनाएं?

answer = 'Ten for that? You must be mad!' if does_not_haggle(brian) else "It's worth ten if it's worth a shekel." 

वहाँ एक त्रिगुट ऑपरेटर के साथ 79 पात्रों पर एक लाइन ब्रेक बनाने के लिए एक सिफारिश रास्ता नहीं है? मुझे इसे PEP 8 में नहीं मिला।

+0

इसे कोष्ठक में रखें। –

उत्तर

12

तुम हमेशा कोष्ठकों के साथ एक logical line across multiple physical lines विस्तार कर सकते हैं:

answer = (
    'Ten for that? You must be mad!' if does_not_haggle(brian) 
    else "It's worth ten if it's worth a shekel.") 

यह implicit line joining कहा जाता है।

उपरोक्त पीईपी 8 सब कुछ इंडेंट-इंडेंट-वन-स्टेप-स्टाइल (hanging indent कहा जाता है) का उपयोग करता है। तुम भी मांगपत्र अतिरिक्त लाइनें आरंभिक कोष्ठक मिलान करने के लिए कर सकते हैं:

answer = ('Ten for that? You must be mad!' if does_not_haggle(brian) 
      else "It's worth ten if it's worth a shekel.") 

लेकिन यह आप सभी के लिए तेजी से 80 कॉलम अधिकतम मार छोड़ देता है।

जहां आप if और else भागों को ठीक से रखते हैं; मैंने उपरोक्त अपनी व्यक्तिगत वरीयता का उपयोग किया, लेकिन ऑपरेटर के लिए कोई विशिष्ट शैली नहीं है जिसे अभी तक कोई भी सहमत है।

19

PEP8 preferred way of breaking long lines is using parentheses का कहना है:

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

answer = ('Ten for that? You must be mad!' 
      if does_not_haggle(brian) 
      else "It's worth ten if it's worth a shekel.") 
+0

आपके उत्तर के लिए धन्यवाद! मुझे दो जवाब बराबर मिलते हैं इसलिए मैंने पुराने को स्वीकार किया। – nedim

+0

मॉन्टी पायथन संदर्भ के लिए उपवास – Mark

0
मन में

भालू से इस सलाह अजगर के ज़ेन: "। पठनीयता मायने रखता है"

टर्नरी ऑपरेटर सबसे अधिक पढ़ने योग्य है जब यह सब एक पंक्ति पर है।

x = y if z else w

अपनी शर्तों या चर पिछले 79 वर्ण (PEP8 देखें), पठनीयता पीड़ित के लिए शुरू होता लाइन धक्का है। (पठनीयता भी है कि क्यों निर्देश/सूची की समझ सबसे अच्छी है।)

तो, ब्रांड्स का उपयोग करके लाइन को तोड़ने की कोशिश करने के बजाय, यदि आप इसे नियमित if ब्लॉक में परिवर्तित करते हैं तो आपको अधिक पठनीय लगता है।

if does_not_haggle(brian): 
    answer = 'Ten for that? You must be mad!' 
else: 
    answer = "It's worth ten if it's worth a shekel." 

बोनस: does_not_haggle उलटी, तर्क: उपरोक्त रिफैक्टरिंग एक और पठनीयता मुद्दा पता चलता है। यदि आप फ़ंक्शन को फिर से लिख सकते हैं, तो यह और भी पठनीय होगा:

if haggles(brian): 
    answer = "It's worth ten if it's worth a shekel." 
else: 
    answer = 'Ten for that? You must be mad!' 
संबंधित मुद्दे