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

Neden ikinci print deyim çıktısı False?"in" işlecinden beklenmeyen sonuç - Python

+1

Python bir ifadeyi nasıl değerlendirdiği için olabilir. Kullanmak isteyebilirsiniz print ((sekmedeki öğe doğrudur)) –

cevap

23

in ve is, Python'daki karşılaştırma işleçleridir, aynı şekilde, < ve ==. bu expr2 dışında

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

sadece bir kere elde edilir Genel olarak,

expr1 <comparison1> expr2 <comparison2> expr3 

işlenir. Bu nedenle, örneğin,

beklendiği gibi çalışır. Ancak, herhangi bir zincirleme karşılaştırma operatörü için geçerlidir. Örnekte,

item in seq is True 

bütün ifade False yüzden,

(item in seq) and (seq is True) 

seq is True kısım False olarak değerlendirilir. muhtemelen istediği her şeyi elde etmek için, gruplama değiştirmek için parantez kullanın:

print((item in seq) is True) 

Click here for the docs. (Seq True) Yanlış ve bu nedenle sizin ifadeniz çıkışları Yanlış

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

aşağıda gösterildiği gibi

3

İfadende item in seq is True içten (item in seq) and (seq is True) olarak değerlendirilir.

+0

Bu, @Tim Peters yanıtında yeterince açıklanmadı mı? –

+0

@ t.m.adam - İkimiz de aynı anda az çok cevapladık. Cevabı bunu daha ayrıntılı olarak açıklarsa, bu cevabı silmeme izin verin. – Beginner

+0

@Beginner NO. Bir sorunun iki doğru cevabı olamaz mı? – void

1

Aşağıdaki cevap doğru değil. type 'bool' argümanı ben (bool False olarak değerlendirilirse olan) seq is True değerlendirmek inanıyoruz iterable


Önceki cevap değildir:

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) 

TypeError: Yorum doğrulanması bir i açıklıyor sonra item in False (False olarak değerlendirilir) değerlendiriliyor.

Muhtemelen print (item in seq) is True'u (True olarak değerlendirir) kastediyorsunuz?

+2

öğesi "False" öğesi, bir "TypeError" öğesini yükseltir, çünkü sağdaki değer yinelenen bir yineleme olmalıdır, bu 'Yanlış' değildir. –

+0

cevabı değiştirildi. Teşekkürler – travelingbones

İlgili konular