2012-02-29 14 views
15

कहें कि मेरे पास चर का एक गुच्छा है जो True या False हैं।एक 'if' कथन में एकाधिक चर का मूल्यांकन करें?

if var1, var2, var3, var4 == False: 
    # do stuff 

कि सिवाय काम नहीं करता है: मैं एक में इन चरों का एक सेट का मूल्यांकन करने के अगर वे सब False इसलिए की तरह हैं अगर बयान देखना चाहते हैं। मैं जानता हूँ कि मैं यह कर सकता:

if var1 == False and var2 == False and var3 == False and var4 == False: 
    # do stuff 

लेकिन वह काफी बदसूरत है - खासकर अगर इन यदि बयान मेरे कोड में एक बहुत होने के लिए जा रहे हैं। क्या क्लीनर सिंटैक्स (पहले उदाहरण की तरह) के साथ मैं इस मूल्यांकन को कर सकता हूं?

उत्तर

33

आप चाहिए never test a boolean variable with == True (or == False)। इसके बजाय, या तो लिखने:

if not (var1 or var2 or var3 or var4): 

या any का उपयोग (और संबंधित समस्याओं में अपनी चचेरी बहन all):

if not any((var1, var2, var3, var4)): 

या का उपयोग पायथन के transitive comparisons:

if var1 == var2 == var3 == var4 == False: 
+7

'कोई भी नहीं (...) '" सभी गलत "मामले के लिए इसे करने का पाइथोनिक तरीका है, और' सभी (...)' "सभी सत्य" मामले के लिए है। –

+0

अच्छा, पूरा जवाब। –

+0

'कोई भी ((var1, var2, var3, var4)) 'का अर्थ है कि सभी का मूल्यांकन किया जाएगा, भले ही आप महंगे कार्यों का उपयोग कर रहे हों, यह बहुत अक्षम होगा और किसी भी और छोटे सर्किटिंग –

3

if all(not v for v in (var1, var2, var3, var4)):

"सभी झूठे" शाखा के लिए है कि उपयोग कर सकते हैं। "सभी सत्य" के लिए, बस if all((var2, var2, var3, var4)): करें।

+7

सभी झूठ को छोटा किया जा सकता है: 'यदि कोई नहीं ((var1, var2, var3, var4)): ' – soulcheck

+0

@soulcheck आपको तर्कों को एक पुनरावर्तनीय में रखना होगा।'कोई भी' केवल एक तर्क लेता है। –

+0

@ सीरीज 8217 thx सुधार के लिए – soulcheck

3

आप कर सकते हैं:

if var1 and var2 and var3 and var4: 
    do stuff 
7

कैसे इस बारे में:

# if all are False 
if not any([var1, var2, var3, var4]): 
    # do stuff 

या:

# if all are True 
if all([var1, var2, var3, var4]): 
    # do stuff 

इन क्योंकि वे सादे अंग्रेजी में हैं, पढ़ने के लिए आसान है।

1

कस्टम फ़ंक्शन के बारे में क्या?

function ListObjectsEqualTo(myList, toValue): 
    for i in myList: 
     if i != toValue: 
      return False 
    return True 

अब आप उपयोग कर सकते हैं यह

if ListObjectsEqualTo((var1, var2, var3, var4), False): 
    # do stuff 
1

आप कर सकता है:

if var1 == var2 == var3 == var4 == False: 
    do_stuff() 

लेकिन, अगर चर सही या गलत का मूल्यांकन करते हैं, तो आप भी ऐसा कर सकता है:

if var1 and var2 and var3 and var4: 
    do_stuff() 

या

if all([var1, var2, var3, var4]): 
    do_stuff() 
1
>>> not any([False, False]) 
True 
>>> not any([True, False]) 
False 
>>> 

उपयोग any() कीवर्ड।

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