खोज…


परिचय

सशर्त अभिव्यक्ति, जैसे कि अगर, एलिफ और अन्य जैसे कीवर्ड, बूलियन स्थिति के आधार पर विभिन्न कार्यों को करने की क्षमता के साथ पायथन कार्यक्रम प्रदान करते हैं: सही या गलत। इस खंड में पायथन सशर्त, बूलियन तर्क और टर्नरी बयानों का उपयोग शामिल है।

वाक्य - विन्यास

  • <अभिव्यक्ति> यदि <सशर्त> और <अभिव्यक्ति> # टर्नरी ऑपरेटर

अगर, एलिफ, और

अजगर में आप का उपयोग कर सशर्त, की एक श्रृंखला को परिभाषित कर सकते if पहले एक, के लिए elif आराम के लिए, ऊपर अंतिम (वैकल्पिक) जब तक else अन्य सशर्त द्वारा पकड़ा नहीं कुछ भी करने के लिए।

number = 5

if number > 2:
    print("Number is bigger than 2.")
elif number < 2:  # Optional clause (you can have multiple elifs)
    print("Number is smaller than 2.")
else:  # Optional clause (you can only have one else)
    print("Number is 2.")

आउटपुट Number is bigger than 2

else if elif बजाय एक सिंटैक्स त्रुटि को ट्रिगर किया जाएगा और अनुमति नहीं है else if का उपयोग करना।

सशर्त अभिव्यक्ति (या "टर्नरी ऑपरेटर")

टर्नरी ऑपरेटर का उपयोग इनलाइन सशर्त अभिव्यक्तियों के लिए किया जाता है। यह सरल, संक्षिप्त संचालन में सबसे अच्छा उपयोग किया जाता है जो आसानी से पढ़ा जाता है।

  • तर्कों का क्रम कई अन्य भाषाओं (जैसे सी, रूबी, जावा, आदि) से अलग है, जो कि कीड़े के लिए नेतृत्व कर सकते हैं जब लोग पायथन के "आश्चर्यजनक" व्यवहार से अपरिचित होते हैं, वे इसका उपयोग करते हैं (वे आदेश को उलट सकते हैं)।
  • कुछ लोग इसे "अविवेकी" पाते हैं, क्योंकि यह विचार के सामान्य प्रवाह (पहले स्थिति और फिर प्रभाव) के विपरीत होता है।
n = 5

"Greater than 2" if n > 2 else "Smaller than or equal to 2"
# Out: 'Greater than 2'

इस अभिव्यक्ति का परिणाम जैसा कि अंग्रेजी में पढ़ा जाएगा - यदि सशर्त अभिव्यक्ति सही है, तो यह बाईं ओर की अभिव्यक्ति का मूल्यांकन करेगा, अन्यथा, दाईं ओर।

टेनरी ऑपरेशंस को भी नेस्टेड किया जा सकता है, जैसे कि:

n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"

वे लंबोदर कार्यों में सशर्त शामिल करने की एक विधि भी प्रदान करते हैं।

अगर बयान

if condition:
    body

if बयान स्टेटस की जाँच करता है। यदि यह True मूल्यांकन करता है, तो यह if स्टेटमेंट के बॉडी को निष्पादित करता है। यदि यह False मूल्यांकन करता है, तो यह शरीर को छोड़ देता है।

if True:
    print "It is true!"
>> It is true!

if False:
    print "This won't get printed.."

स्थिति किसी भी मान्य अभिव्यक्ति हो सकती है:

if 2 + 2 == 4:
    print "I know math!"
>> I know math!

बड़ा बयान

if condition:
    body
else:
    body

अन्य विवरण केवल तभी लागू होगा जब पूर्ववर्ती सशर्त विवरणों से सभी गलत हो जाएंगे।

if True:
    print "It is true!"
else:
    print "This won't get printed.."

# Output: It is true!

if False:
    print "This won't get printed.."
else:
    print "It is false!"

# Output: It is false!

बूलियन लॉजिक एक्सप्रेशंस

बूलियन लॉजिक एक्सप्रेशन, True या False मूल्यांकन के अलावा, उस मूल्य को लौटाते हैं जिसे True या False रूप में व्याख्या किया गया था। यह तर्क का प्रतिनिधित्व करने का पाइथोनिक तरीका है जिसे अन्यथा एक और परीक्षण की आवश्यकता हो सकती है।


और ऑपरेटर

and ऑपरेटर सभी अभिव्यक्तियों का मूल्यांकन करता है और अंतिम अभिव्यक्ति लौटाता है यदि सभी अभिव्यक्तियाँ True मूल्यांकन करती हैं। अन्यथा यह पहला मान लौटाता है जो False मूल्यांकन करता है:

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

या संचालक

or ऑपरेटर सही के लिए छोड़ दिए गए भावों का मूल्यांकन करता है और True या अंतिम मान (यदि कोई भी True ) का मूल्यांकन करने वाला पहला मान लौटाता है।

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

आलसी मूल्यांकन

जब आप इस दृष्टिकोण का उपयोग करते हैं, तो याद रखें कि मूल्यांकन आलसी है। परिणाम निर्धारित करने के लिए जिन अभिव्यक्तियों का मूल्यांकन करने की आवश्यकता नहीं होती है, उनका मूल्यांकन नहीं किया जाता है। उदाहरण के लिए:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

उपरोक्त उदाहरण में, print_me मार डाला कभी नहीं रहा है क्योंकि अजगर निर्धारित कर सकते हैं पूरे अभिव्यक्ति है False जब यह मुठभेड़ों 0 ( False )। अगर आपके प्रोग्राम लॉजिक को पूरा करने के लिए print_me को निष्पादित करने की आवश्यकता है, तो print_me ध्यान में रखें।


कई स्थितियों के लिए परीक्षण

कई शर्तों के लिए जाँच करते समय एक सामान्य गलती तर्क को गलत तरीके से लागू करना है।

यह उदाहरण यह जांचने की कोशिश कर रहा है कि दो चर प्रत्येक 2 से अधिक हैं। कथन का मूल्यांकन इस प्रकार किया जाता है - if (a) and (b > 2) । यह एक अनपेक्षित परिणाम पैदा करता है क्योंकि bool(a) के रूप में मूल्यांकन करता है True जब a शून्य नहीं है।

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

प्रत्येक चर की अलग से तुलना करने की आवश्यकता है।

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

एक और, समान, गलती की जाँच करते समय किया जाता है अगर एक चर कई मानों में से एक है। इस उदाहरण में कथन का मूल्यांकन किया गया है - if (a == 3) or (4) or (6) । यह एक अप्रत्याशित परिणाम पैदा करता है क्योंकि bool(4) और bool(6) प्रत्येक True मूल्यांकन करता है

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

फिर से प्रत्येक तुलना अलग से की जानी चाहिए

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

इसे लिखने के लिए ऑपरेटर का उपयोग करना विहित तरीका है।

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no

सत्य मान

निम्नलिखित मानों को False माना जाता है, इसमें वे बूलियन ऑपरेटर पर लागू होने पर False मूल्यांकन करते हैं।

  • कोई नहीं
  • असत्य
  • 0 , या शून्य के बराबर कोई संख्यात्मक मान, उदाहरण के लिए 0L , 0.0 , 0j
  • रिक्त क्रम: '' , "" , () , []
  • खाली मैपिंग: {}
  • उपयोगकर्ता-परिभाषित प्रकार जहां __bool__ या __len__ विधियां 0 या False __len__

पायथन में अन्य सभी मूल्य True मूल्यांकन करते हैं।


नोट: एक आम गलती बस एक ऑपरेशन के झूठ की जाँच करना है जो भिन्न भिन्न मूल्यों को लौटाता है जहां अंतर मायने रखता है। उदाहरण के लिए, if foo() से अधिक स्पष्ट होने के बजाय if foo() का उपयोग किया if foo() if foo() is None

दो वस्तुओं के तुलनात्मक परिणाम प्राप्त करने के लिए cmp फ़ंक्शन का उपयोग करना

पायथन 2 में एक cmp फ़ंक्शन शामिल है जो आपको यह निर्धारित करने की अनुमति देता है कि क्या एक वस्तु किसी अन्य वस्तु की तुलना में कम, बराबर या उससे अधिक है। इस फ़ंक्शन का उपयोग उन तीन विकल्पों में से एक के आधार पर एक सूची से एक विकल्प चुनने के लिए किया जा सकता है।

मान लीजिए कि आपको 'greater than' x > y , 'less than' x < y 'equal' x < y और 'equal' अगर 'equal' x == y 'greater than' प्रिंट करने की आवश्यकता है।

['equal', 'greater than', 'less than', ][cmp(x,y)]

# x,y = 1,1 output: 'equal'
# x,y = 1,2 output: 'less than'
# x,y = 2,1 output: 'greater than'

cmp(x,y) निम्न मान लौटाता है

तुलना परिणाम
x <y -1
x == y 0
x> य 1

इस समारोह अजगर 3. आप उपयोग कर सकते हैं पर निकाल दिया जाता है cmp_to_key(func) सहायक में स्थित समारोह functools महत्वपूर्ण कार्य करने के लिए पुराने तुलना कार्यों कन्वर्ट करने के लिए अजगर 3 में।

सशर्त अभिव्यक्ति का मूल्यांकन सूची समझ का उपयोग करना

पायथन आपको सशर्त अभिव्यक्तियों का मूल्यांकन करने के लिए सूची समझ को हैक करने की अनुमति देता है।

उदाहरण के लिए,

[value_false, value_true][<conditional-test>]

उदाहरण:

>> n = 16
>> print [10, 20][n <= 15]
10

यहां n<=15 रिटर्न False (जो पायथन में 0 के बराबर है)। तो पायथन क्या मूल्यांकन कर रहा है:

[10, 20][n <= 15]
==> [10, 20][False] 
==> [10, 20][0]     #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10
पायथन 2.x 2.7

इनबिल्ट __cmp__ विधि ने 3 संभावित मान लौटाए: 0, 1, -1, जहां cmp (x, y) 0 लौटाया गया: यदि दोनों objecs समान थे 1: x> y -1: x <y

इसे सूची के पहले (यानी इंडेक्स 0), दूसरे (यानी इंडेक्स 1) और आखिरी (यानी इंडेक्स -1) लिस्ट के तत्व के साथ इस्तेमाल किया जा सकता है। हमें इस प्रकार की एक शर्त देना:

[value_equals, value_greater, value_less][<conditional-test>]

अंत में, पायथन से ऊपर के सभी उदाहरणों में एक को चुनने से पहले दोनों शाखाओं का मूल्यांकन किया जाता है। केवल चुनी हुई शाखा का मूल्यांकन करने के लिए:

[lambda: value_false, lambda: value_true][<test>]()

जहां अंत में () जोड़ना यह सुनिश्चित करता है कि लंबो कार्यों को केवल अंत में कहा जाता है / मूल्यांकन किया जाता है। इस प्रकार, हम केवल चुने हुए शाखा का मूल्यांकन करते हैं।

उदाहरण:

count = [lambda:0, lambda:N+1][count==N]()

यदि कोई वस्तु नहीं है तो परीक्षण करना और उसे निर्दिष्ट करना

आप अक्सर किसी वस्तु को कुछ असाइन करना चाहते हैं यदि यह None , यह दर्शाता है कि इसे असाइन नहीं किया गया है। हम aDate उपयोग aDate

इसका उपयोग करने का सबसे सरल तरीका is None परीक्षण is None है।

if aDate is None:
    aDate=datetime.date.today()

(ध्यान दें कि यह कहने के लिए अधिक पायथोनिक है == None is None बजाय == None ।)

लेकिन इस धारणा का फायदा उठाकर इसे थोड़ा अनुकूलित किया जा सकता है कि बूलियन अभिव्यक्ति में True मूल्यांकन not None करेगा। निम्नलिखित कोड समतुल्य है:

if not aDate:
    aDate=datetime.date.today()

लेकिन अधिक पाइथोनिक तरीका है। निम्नलिखित कोड भी समतुल्य है:

aDate=aDate or datetime.date.today()

यह एक शॉर्ट सर्किट मूल्यांकन करता है। यदि aDate को आरंभीकृत किया जाता है और not None , तो यह बिना किसी शुद्ध प्रभाव के खुद को सौंपा जाता है। यदि यह is None , तो datetime.date.today() aDate को सौंपा जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow