2013-11-04 11 views
5

Python'a yeni ve Python mantıksal ifadelerini deniyorum. Anlayamadığım bir yere geldim. Kimse bana Python 2.7'de neler olup bittiğini anlatıyor. 0 ile arasındaki fark nedir? Python'da yanlış değer.Boolean Python Değer karışıklığı

 
>>> 0 or False 
False 
>>> False or 0 
0 

Tercüman neden farklı cevaplar veriyor?

+0

Bu değerlerin her ikisinin de "falsi" olduğuna dikkat edin; Yani, her ikisi de bir if ifadesinde "False" olarak değerlendirirler. –

cevap

6

or işlecinin davranışıyla karıştırılıyorsunuz; ilk ifade, yalnızca true değeri ise; ne 0 de False ikinci değer döndürülür, böylece de geçerlidir:

>>> 0 or 'bar' 
'bar' 
>>> False or 'foo' 
'foo' 

sayısal 0, özel sınıfları __bool__ yöntemi uygulayarak bu değiştirebilir boş kap, None veya False (doğru olarak kabul edilir (olmayan herhangi bir değer piton 3), __nonzero__ (piton 2) veya __len__ (uzunluk 0) boş

ikinci ifade da değerlendirilmez ilk True ise.

>>> True or 1/0 
True 

1/0 ifadesi, ZeroDivision istisnasını artıracaktır, ancak Python tarafından bile değerlendirilmemektedir.

Bu

boolean operators documentation belgelenmiştir:

ilk x or yx değerlendirir ifade; x doğruysa, değeri döndürülür; aksi halde y değerlendirilir ve elde edilen değer döndürülür. Bu False ise

Benzer bir şekilde, aksi takdirde and ikinci ifade döndürülür, ilk ifade döndürür.

+0

"True olan ilk ifadeyi döndürür" Burada 0 veya Yanlış Nasıl Yanlış Doğru? –

+0

Bu cevabı beğenmedim çünkü gerekçelendirme "Doğru olan ilk ifadeyi döndürüyor" davranışı tam olarak açıklamıyor.Daha az zarif olsa da, karşılaşılan davranışları daha iyi açıklayabildiği gibi, "işlenenlerden geçer ve doğru olan ilk ifadeyi ya da karşılaşılan son işleneni döndürür" gibi bir şey. –

+0

@WaleedKhan: ifadeyi ayarladı. –

1

Bu davranışın doğası, python'un expression evaluation sırasına göre düzenlenmiştir. Python, ifadelerini soldan sağa doğru değerlendirir ve bunu lazy manner içinde yapar. Bunun anlamı, yorumlayıcının, ifadenin geri kalanı ne olursa olsun, ifadenin değeri True olduğunda, ifade ile ilişkili iş akışının kolunu takip edeceği anlamına gelir. İfadelerin hiçbiri True değilse, en son (sonuncu) döndürecektir. Bu, hesaplama kaynaklarının korunmasının yararlarını sağlar. Aşağıdaki kodu düşünün: range(10**8) bu durumda hiçbir zaman denir ki

>>>False or False or True or range(10**8) 
True 
>>> 

Not dolayısıyla çok zaman kaydedilir.