2017-07-19 8 views
15
>>> item = 2 
>>> seq = [1,2,3] 
>>> print (item in seq) 
True 
>>> print (item in seq is True) 
False 

दूसरा print कथन आउटपुट False क्यों है?`in` ऑपरेटर से अप्रत्याशित परिणाम - पायथन

+1

यह हो सकता है कि पाइथन अभिव्यक्ति का मूल्यांकन कैसे करता है। आप 'प्रिंट ((सीक में आइटम) का उपयोग करना चाहते हैं)' –

उत्तर

23

in और is पायथन में तुलना ऑपरेटर हैं, जैसा कि कहते हैं, < और ==। सामान्य तौर पर,

expr1 <comparison1> expr2 <comparison2> expr3 

रूप

(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3) 

कि expr2 को छोड़कर केवल एक बार मूल्यांकन किया जाता है माना जाता है। यही कारण है कि, उदाहरण के लिए,

0 <= i < n 

अपेक्षा के अनुसार काम करता है। हालांकि, यह पर लागू होता है जंजीर तुलना ऑपरेटर। अपने उदाहरण में,

item in seq is True 

तो पूरे अभिव्यक्ति गलत है,

(item in seq) and (seq is True) 

seq is True हिस्सा गलत है माना जाता है। क्या आप शायद इरादा पाने के लिए, समूह को बदलने के लिए कोष्ठक का उपयोग:

print((item in seq) is True) 

Click here for the docs। के रूप में (seq यह सच है) झूठी है और इसलिए अपने बयान आउटपुट झूठी नीचे

>>>print ((item in seq) and (seq is True)) 
False 

दिखाया

3

अपने बयान item in seq is True आंतरिक (item in seq) and (seq is True) के रूप में मूल्यांकन किया जाता है।

+0

क्या यह @ टिम पीटर्स उत्तर में पर्याप्त रूप से समझाया नहीं गया है? –

+0

@ t.m.adam - हम दोनों ने एक ही समय में कम या ज्यादा उत्तर दिया। यदि उसका उत्तर इसे अधिक विस्तृत तरीके से समझाता है, तो मुझे यह जवाब हटा दें। – Beginner

+0

@ विजेता संख्या। क्या किसी प्रश्न के दो सही उत्तर नहीं हो सकते हैं? – void

1

नीचे दिया गया उत्तर सही नहीं है।

In [17]: item in (seq is True) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-17-4e7d6b2332d7> in <module>() 
----> 1 item in (seq is True) 

लेखन त्रुटि:: टिप्पणी यह ​​एक मैं सत्यापित बताते प्रकार 'bool' का तर्क iterable


पिछला जवाब नहीं है मेरा मानना ​​है कि यह seq is True मूल्यांकन कर रही है (जो bool False का मूल्यांकन) , फिर item in False का मूल्यांकन (जो False का मूल्यांकन करता है)।

संभवतः आपका मतलब print (item in seq) is True (जो True का मूल्यांकन करता है)?

+2

'False में आइटम '' TypeError' उठाता है, क्योंकि दायां हाथ मान एक पुनरावर्तनीय होना चाहिए, जो' गलत 'नहीं है। –

+0

उत्तर बदल गया। धन्यवाद – travelingbones

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