2009-03-13 14 views
7

संभव डुप्लिकेट:
Ternary conditional operator in Pythonपायथन में टर्नरी ऑपरेटर को बदलने का सबसे अच्छा तरीका क्या है?

अगर मैं जैसे कुछ कोड है:

x = foo ? 1 : 2 

मैं इसे कैसे पायथन में अनुवाद करना चाहिए? क्या मैं यह कर सकता हूं?

if foo: 
    x = 1 
else: 
    x = 2 

क्या एक्स अभी भी अगर/फिर ब्लॉक के बाहर गुंजाइश में होगा? या मुझे ऐसा कुछ करना है?

x = None 
if foo: 
    x = 1 
else: 
    x = 2 
+0

इसे बदलने का एक तरीका यह है कि इसे अपने सही नाम से कॉल करें। पायथन में यह "सशर्त अभिव्यक्ति" है। सी में यह "सशर्त ऑपरेटर" है। जावा में यह "सशर्त ऑपरेटर" है। –

उत्तर

26

पायथन 2.5+ में टर्नरी ऑपरेटर (औपचारिक रूप से conditional expression) का उपयोग करें।

x = 1 if foo else 2 
+0

केवल, कृपया इसे सशर्त अभिव्यक्ति कहते हैं, क्योंकि यह वही है। –

+0

@ एड्रियनो वरोली पियाज़ा @ एसएलॉट ने जवाब में कहा। धन्यवाद! – phihag

0

आप की तरह कुछ इस्तेमाल कर सकते हैं:

val = float(raw_input("Age: ")) 
status = ("working","retired")[val>65] 
print "You should be",status 

हालांकि यह बहुत नहीं है pythonic

(अन्य विकल्प सी/PERL के करीब हैं, लेकिन यह अधिक टपल जादू शामिल है)

1

this one.

की डुप्लिकेट (हालांकि मैं downvote या टिप्पणी करने के लिए करता है, तो यह गलत है किसी के लिए प्रतीक्षा कर रहा हूँ) मैं इस का उपयोग करें:

x = foo and 1 or 2 
+0

यह इस मामले में काम करता है, लेकिन यह सामान्य रूप से खतरनाक हो सकता है: x = foo और bar या baz अगर फू सत्य है और बार गलत है, तो शायद बाज़ का उत्पादन होगा, जो शायद आप नहीं चाहते हैं। – Khoth

+0

आह, समझ गया। मैंने थोड़ी देर के लिए इसका इस्तेमाल किया है, और यह बिल्कुल यकीन नहीं था कि यह एक स्वीकार्य विधि क्यों नहीं थी। मैं अब देख सकता हूँ। – jonstjohn

+0

यह कोड काफी भंगुर है। – ncmathsadist

5

त्रिगुट ऑपरेटर mentioned से ही उपलब्ध है पायथन 2.5। WeekeePeedeea से:

हालांकि यह वाक्य रचना पर असहमति से कई वर्षों के लिए विलंबित कर दिया गया था, पायथन के लिए एक त्रिगुट ऑपरेटर अजगर संवर्धन प्रस्ताव 308 के रूप में मंजूरी दे दी और सितंबर 2006 में 2.5 रिहाई के लिए जोड़ा गया था

पायथन का टर्नरी ऑपरेटर से अलग है?: के क्रम में ऑपरेटर; सामान्य रूप op1 if condition else op2 है। यह फॉर्म ओपी 1 को सामान्य मान और op2 असाधारण मामले के रूप में मानने पर आमंत्रित करता है।

2.5 से पहले, एक बदसूरत वाक्य रचना (lambda x:op2,lambda x:op1)[condition]() जो भी केवल के मूल्यांकन के भाव जो वास्तव में करने के क्रम में की जरूरत है दुष्प्रभाव को रोकने के ख्याल रखता है इस्तेमाल कर सकते हैं।

-1

एक अच्छा अजगर चाल इस उपयोग कर रहा है:

foo = ["ifFalse","ifTrue"][booleanCondition] 

यह एक 2 अंग का सूची बनाता है और बूलियन हो जाता है या तो 0 (गलत) या 1 (सही) है, जो सही सदस्य चुनता है। बहुत पठनीय नहीं है, लेकिन पाइथनी :)

+0

मैं न तो पठनीय, न ही पाइथोनिक होगा, लेकिन यह अभी भी कुछ है जो मैं हर समय उपयोग करता हूं ... यदि आप यह चाल कर रहे हैं, तो इसे एक टुपल के रूप में करें: (trueFunc, falseFunc) [बूल (हालत)] –

+0

पायथन 2.5 सशर्त अभिव्यक्ति केवल एक TrueFunc, falseFunc अभिव्यक्तियों का मूल्यांकन करेगी। यह सूत्र दोनों का मूल्यांकन करता है। –

+0

उपयोग (बूलियन कंडिशन और [सच्चेफंक्श] या [झूठी फनक]) [0]। – ThomasH

2

मैं अभी भी अपनी परियोजनाओं में से एक में 2.4 का उपयोग कर रहा हूं और कुछ बार इसमें आया हूं। सबसे सुरुचिपूर्ण समाधान मैं इस के लिए देख लिया है:

x = {True: 1, False: 2}[foo is not None] 

मुझे यह पसंद है क्योंकि यह सूचकांक मान 0 और 1 के साथ एक सूची का उपयोग कर अपनी वापसी मूल्य प्राप्त करने की तुलना में अधिक स्पष्ट बूलियन परीक्षण प्रतिनिधित्व करता है।

+0

"फू नहीं" बेहतर होगा - खाली सूचियां, शून्य और व्हाट्नॉट का मूल्यांकन भी गलत होना चाहिए। – Andreas

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

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