2013-03-14 31 views
5
>>> def foo(a): 
     print "called the function" 
     if(a==1): 
      return 1 
     else: 
      return None 
>>> a=1 

>>> if(foo(a) != None and foo(a) ==1): 
    print "asdf" 

called the function 
called the function 
asdf 

हाय। अतिरिक्त चर का उपयोग किये बिना मैं फ़ंक्शन को दो बार कॉल करने से कैसे बच सकता हूं।पायथन अगर स्थिति और "और"

+1

(क) एक चर में। फिर 'if()' खंड में परिवर्तनीय मान की जांच करें। – Raptor

+5

अगर (foo (a) == 1): – jimifiki

+1

बिल्कुल, दूसरी शर्त के लिए 'सत्य' होना चाहिए, पहले होना चाहिए। यह भी ध्यान रखें कि स्थिति के चारों ओर ब्रैकेट को पायथन में खराब रूप माना जाता है। 'अगर (ए == 1): 'केवल एक होना चाहिए' अगर एक == 1:'। –

उत्तर

12

आप इस

if None != foo(a) == 1: 

तरह तुलना श्रृंखला कर सकते हैं यह सिवाय इसके कि यह केवल foo का मूल्यांकन करता है (क) एक बार की तरह

if (None != foo(a)) and (foo(a) == 1): 

काम करता है।

+0

आप श्रृंखला ** समानता ** तुलना कर सकते हैं? खैर, उस पर देखो! – slezica

+0

@ uʍop ǝpısdn, हाँ यह वही काम करता है (एक अंतर्निहित 'और' के साथ) आपके उत्तर में अन्य तुलना –

+2

जबकि यह एक अच्छा _ सामान्य_ उत्तर है, पहले चेक अभी भी दिए गए मामले में अनावश्यक है। –

7

मैं अतिरिक्त चर का उपयोग किये बिना दो बार फ़ंक्शन को कॉल करने से कैसे बच सकता हूं।

यहाँ, आप बस

if foo(a) == 1: 

foo(a) != None साथ

if(foo(a) != None and foo(a) ==1): 

की जगह ले सकता बेमानी है: अगर foo(a) == 1, यह नहीं हो None करने की गारंटी है।

+0

शायद पोस्ट कोड वास्तविक कोड नहीं है लेकिन केवल एक उदाहरण है। अगर (foo (a)! = कोई नहीं और foo (a) == 1): बेहतर समाधान के रूप में लगता है – jimifiki

+1

@jimifiki यदि फ़ंक्शन के साइड इफेक्ट्स हैं, जो समस्याएं पैदा कर सकता है। इसके अलावा, यह पूछे जाने वाले प्रश्न का सबसे अच्छा जवाब है। यदि ओपी ने इसे अधिक सरल बना दिया है, तो उसे एक नया प्रश्न पूछने की जरूरत है। –

+0

यह सवाल का जवाब नहीं दे रहा है। मैं @jimifiki से सहमत हूं। और नहीं, यह सबसे अच्छा नहीं है, – slezica

1

निम्नलिखित बयान

if foo(a) == 1: 

दोनों स्थितियों से निपटने होगा।

+0

डाउनवोट क्यों? कृपया समझाएँ। –

1

अगर foo (क) == 1, तो foo (क) नहीं कोई नहीं हो जाएगा,

इतना करने के लिए अपने कोड को आसान बनाने: आप `foo का परिणाम बचा सकता है

if foo(a): 
    print('asdf') 
+0

मानते हैं कि उनका मतलब है "कोई भी मूल्य जो सत्य का मूल्यांकन करता है" थोड़ा सा डोडी है, मुझे लगता है। –

+0

मुझे नहीं लगता कि अगर foo (ए) और अगर foo (a) == 1, के बीच कोई अंतर है। –

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