2010-06-22 20 views
67

सी और कई अन्य भाषाओं में conditional (aka ternary) ऑपरेटर है। यह आपको एक शर्त की सच्चाई के आधार पर दो मूल्यों के बीच बहुत तेज़ विकल्प बनाने की अनुमति देता है, जो असाइनमेंट सहित, अभिव्यक्तियों को बहुत संक्षिप्त बनाता है।पायथन? (सशर्त/टर्नरी) ऑपरेटर के लिए ऑपरेटर

मैं इस याद आती है क्योंकि मुझे लगता है कि मेरी कोड सशर्त कार्य है कि अजगर में चार लाइनें लेने के बहुत सारे है लगता है:

if condition: 
    var = something 
else: 
    var = something_else 

सी में जबकि यह होगा:

var = condition? something: something_else; 

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

मुझे सशर्त ऑपरेटर की चतुरता पसंद है क्योंकि यह कोड को स्किम करते समय मुझे विचलित करने से अनजान समझा जाता है।

तो, पायथन में, क्या कोई ऐसी चाल है जिसका उपयोग आप सशर्त ऑपरेटर के फायदे का अनुमान लगाने के लिए एक पंक्ति पर असाइनमेंट प्राप्त करने के लिए कर सकते हैं जैसा कि मैंने उन्हें रेखांकित किया है?

उत्तर

128

अजगर इस तरह के एक ऑपरेटर है:

variable = something if condition else something_else 

वैकल्पिक रूप से, हालांकि अनुशंसित नहीं है (देखें @ karadoc की टिप्पणी):

variable = (condition and something) or something_else 
+8

"variable = condition और something या something_else" भी काम नहीं करता है। उदाहरण के लिए, "सही और गलत या सत्य" सत्य लौटाता है, जबकि "सही? गलत: सत्य" झूठा वापस आ जाएगा। – karadoc

+0

कुछ या Something_else ठीक काम करता है? उदाहरण के लिए यदि कुछ शून्य था तो आप इसे किसी चीज़ पर सेट करेंगे? – Breedly

12

बड़े अजगर कोड में, आप चाल देख सकते हैं:

condition and something or something_else 

हालांकि, इसे काफी बेहतरसे हटा दिया गया हैनिर्माण:

something if condition else something_else 
+0

क्यों "जो कुछ भी नहीं" वापस लौटाएं, हालांकि? – Will

+4

@Will: क्योंकि "अगर कुछ भी नहीं लौटा" तो सिथैक्टिक रूप से पाइथन सही नहीं है? –

+0

@ शायद संभवतः क्योंकि आप 'else' हिस्सा प्रदान नहीं करते हैं? – glglgl

संबंधित मुद्दे