2012-12-10 20 views
28

Bunu düşündüğüm şeyi yapar mı? Bana öyle geliyor ki evet. Emin olmak için soruyorum.Üç değerin eşitlik testi

if n[i] == n[i+1] == n[i+2]: 
    return True 

Bunlar eşit mi? erişimler sadece bir kez yapılır beri

if n[i] == n[i+1] and n[i+1] == n[i+2]: 
    return True 
+2

Bu doğrudur. –

+0

Çoğaltılması: http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

cevap

25

Bu eşdeğer ama eşit değildir. Python doğal olarak ilişkisel operatörleri zincirler (in ve is dahil).

hafif farkı göstermek için en kolay yolu:

>>> print(1) == print(2) == print(3) 
1 
2 
3 
True 
>>> print(1) == print(2) and print(2) == print(3) 
1 
2 
2 
3 
True 
+3

Bu, aynı bir Birinin çalıştığı ve diğerinin başarısız olduğu senaryo ('n', bir erişimden sonra' n [i + 1] 'değerini değiştiren bir nesnedir. Düzenleme: Farkı göstermek için bir örnekte düzenledim. –

3

evet ....

da doğru yapabilirsiniz olan

5 > x > 1 

veya

1 < x < 5 
6

Evet, ancak, karşılaştırıldığında ns zincirine zincirlenir, ortak ifadesi bir kez değerlendirilir, and kullanılırken iki kez değerlendirilir. Her iki durumda da, ikinci karşılaştırma ilk, örnek yanlış ise değerlendirilmez docs:

karşılaştırmalar < = Z eşdeğer y ör < x, isteğe bağlı olarak zincir olabilir x < y ve y < = z, y y sadece bir kez değerlendirilir (ancak her iki durumunda z, x < y'nin false olduğu durumlarda hiç değerlendirilmez).

2

Evet, Python en aralıklarında gerçek ne yanlış ne de karşılaştırma operatörleri döner, bunun yerine (oldukça geçmişte olduğu, sınıf adını hatırlayamıyorum) 'karşılaştırma sonucu' nesneyi döndürmek ve bu nesne sağlar _ _, _ gt _, _ eşdeğer _ vs vs yöntemler ve nihai sonuç için 'sorumlu' (ve 'karşılaştırma sonucu' deki sonunda doğru veya yanlış döküm olduğu Beyan). Bu, semantik kontrol pythonunun bir sihri size sağlar :)