2010-06-22 15 views
67

C ve birçok diğer diller için (koşullu/üçlü) operatörü bir conditional (aka ternary) operatörü var. Bu, bir koşulu gerçeğe dayanarak iki değer arasında çok ters seçimler yapmanıza izin verir, bu da ödevler dahil olmak üzere ifadeleri çok özlü kılar. Bir iki kezpython? Ödevlerin

var = condition? something: something_else; 

: o olurdu

if condition: 
    var = something 
else: 
    var = something_else 

C Oysa: Benim kod koşullu Python dört hattını da atamaları çok var bulmaları nedeniyle

bunu kaçıramam Bir dosyada iyi, ama çok sayıda şartlı atamalar varsa, satırların sayısı patlar ve en kötüsü de onlara çizilir. ben kod kaymağını zaman Beni meşgul un-stratejik gördükleri şeyleri tutar çünkü

Ben koşullu operatör terseness gibi.

Dolayısıyla, Python'da, atamayı gerçekleştirdiğim sıradaki operatörün avantajlarını yaklaşık olarak belirlemek için atamayı tek bir satıra almak için kullanabileceğiniz herhangi bir numara var mı?

cevap

128

Python böyle bir operatör var: önerilmez rağmen

variable = something if condition else something_else 

Alternatif (karadoc yorumuna @ bakınız):

eski Python kodunda
variable = (condition and something) or something_else 
+8

Bu "değişken = koşul ve bir şey veya bir şey var" seçeneği bile çalışmıyor. Örneğin, "Doğru ve Yanlış veya Doğru" True değerini döndürür, "Doğru? Yanlış: Doğru" ise False değerini döndürür. – karadoc

+0

Bir şey mi yoksa Something_else düzgün çalışıyor mu? Mesela neyin bir şey olsaydı, onu bir _eye koydu? – Breedly

12

, sen hile görebilirsiniz:

condition and something or something_else 

ancak buçok üstün yerini aldığıyapı:

something if condition else something_else 
+0

neden "işe yaramazsa geri dön" değil mi? – Will

+4

@Will: Çünkü "ne olursa olsun geri dön" sözdizimsel Python doğru değil mi? –

+0

@Will Muhtemelen bir “else” parçası sağlamadığınız için? – glglgl