2012-07-30 19 views
12

मैं कुछ करता है, तो है जैसे बयानों:स्प्लिट लंबे सशर्त भाव

def is_valid(self): 
    if (self.expires is None or datetime.now() < self.expires) 
    and (self.remains is None or self.remains > 0): 
     return True 
    return False 

जब मैं इस भाव मेरी विम स्वचालित रूप से if पंक्ति के रूप में यह एक ही मांगपत्र के साथ नई लाइन के लिए ले जाता है and टाइप करें। मैं अधिक इंडेंट संयोजनों का प्रयास करता हूं, लेकिन हमेशा वैध मानता है कि अमान्य वाक्यविन्यास है। अगर लंबा है तो कैसे निर्माण करें?

+5

बस एक टिप्पणी, आपके उदाहरण में 'if' कथन रखने की कोई आवश्यकता नहीं है। आप बस वापस लौट सकते हैं (self.expires कोई नहीं है या डेटाटाइम .now() ...) ' – mgilson

+0

मैं सिर्फ पायथन सीख रहा हूं और मुझे लगता है कि मैं ऐसा कर सकता हूं लेकिन इतना अच्छा महसूस नहीं कर सकता। धन्यवाद mgilson – kbec

उत्तर

20

पूरी हालत के चारों ओर एक अतिरिक्त स्तर के ब्रैकेट जोड़ें। यह आपको अपनी इच्छानुसार लाइन ब्रेक डालने की अनुमति देगा।

if (1+1==2 
    and 2 < 5 < 7 
    and 2 != 3): 
    print 'yay' 

रिक्त स्थान का उपयोग करने के की वास्तविक संख्या के बारे में, कुछ भी Python Style Guide जनादेश नहीं है लेकिन कुछ विचार देता है:

# No extra indentation. 
if (this_is_one_thing and 
    that_is_another_thing): 
    do_something() 

# Add a comment, which will provide some distinction in editors 
# supporting syntax highlighting. 
if (this_is_one_thing and 
    that_is_another_thing): 
    # Since both conditions are true, we can frobnicate. 
    do_something() 

# Add some extra indentation on the conditional continuation line. 
if (this_is_one_thing 
     and that_is_another_thing): 
    do_something() 
3

आप कर सकते थे की विपरीत कोष्ठक के अंदर लाइनब्रेक डाल परीक्षण और परीक्षण के उप-सेट पर झूठी वापसी:

def is_valid(self): 
    if self.expires is not None and datetime.now() >= self.expires: 
     return False 
    if self.remains is not None and self.remains <= 0: 
     return False 
    return True 

इस तरह आप परीक्षण की लंबी लाइन तोड़ सकते हैं और पूरी चीज को और अधिक पठनीय बना सकते हैं।

हां, आप परीक्षण में न्यूलाइन की अनुमति देने के लिए अपने बूलियन परीक्षणों के आस-पास अतिरिक्त कोष्ठक का उपयोग कर सकते हैं, लेकिन जब आपको कई पंक्तियों में जाना है तो पठनीयता बहुत अधिक हो जाती है।

+0

धन्यवाद, लेकिन क्या यह वास्तव में और अधिक पठनीय है? एक 'अगर' तार्किक रूप से टूट गया है तो मेरे लिए अधिक पठनीय है - मैं इसे साझा परिणाम विवरण के साथ कई ifs की तरह व्यवहार कर सकता हूं। – kbec

+4

हां, बिल्कुल। आपकी सामग्री के अमान्य होने के लिए आपके पास 2 तर्कसंगत असंबंधित कारण हैं। या तो यह समाप्त हो गया है, या अवशेष 0 तक पहुंच गया है। अगर भविष्य में और अधिक कारण हैं तो क्या होगा? इन अलग-अलग बढ़ते पठनीयता और रखरखाव को बनाए रखना। –

+0

शायद आप सही हैं अगर अधिक कारण हैं। – kbec