2012-01-11 23 views
10

neden
True and []
döner [] yerine YanlışDoğru Çıktı ve []

merak ediyordum ifadesi sözdizimsel şeker var mı?

+0

çok iyi bir soru, asla bilmedim. Bu uygulanabilirlik ile ilgili planlarımın gerçek konumunun boş bir listeye dönmek için gerekeceği kodumun bazı yönlerinde var. Çizginin Yanlış ve [] olduğunu görürsünüz, yanlış döndürür. nice .. :) –

cevap

17

cevap 5.10. Boolean Expressions bulunur:

ilk x and yx değerlendirir ifade; x yanlışsa, değeri döndürülür; aksi halde y değerlendirilir ve elde edilen değer iade edilir.

2

Bu sözdizimsel şeker bazen Python bir ternary operator olarak kullanılır

C++: someVar = someCondition ? valueIfTrue : valueIfFalse; 
Python: someVar = someCondition and valueIfTrue or valueIfFalse 

Düzenleme: Bu Python büyük bir tuzak olduğunu ve değiştirilmesi gerektiğini, :) yorum göre, çıkıyor

+3

Bunlar eşdeğer değil, python sürümünde bir gotcha olduğunu unutmayın: Eğer 'valueIfTrue'' False' için değerlendirirse, 'valueIfFalse''''''Seçen' 'True' veya' False'' olup olmadığını döndürür . Bunun yerine, bazı boşluklardan başka bir değer varsa, bu kusuru önlemek için 'someVar = valueIfTrue 'kullanın. –

+0

"valueIfTrue" bir False değerine göre değerlendirilirse çalışmaz. Daha sonra, 'elseIfTrue', eğer varsa, elseCondition else valueIfFalse (2.5'den beri) kullanmak daha iyidir. BTW: '? : 'aslında C++ 'dan değil C'den geliyor. – glglgl

+1

1. Sözdizimsel şeker değildir. Sadece sözdizimi. (aksi halde: ne için şeker?). 2. Python'da a ve b veya c 'YANLIŞ. Bunu demek istemediğinde, c'yi değerlendirebilir. – Celada