2016-04-28 3 views
0

Beispiel:Null assignement in Inline-Vergleich

>>> x = 10 
>>> x = x > 9 and 0 or x 
>>> x 
10 

während:

>>> x = 10 
>>> x = x > 9 and 1 or x 
>>> x 
1 

Offensichtlich 0 als Boolean Falsch behandelt wird. Wie verwende ich den Inline-Vergleich, um Integer 0 zuzuweisen?

+0

Können Sie angeben, welches Ergebnis Sie wollen? –

+0

Ich möchte 0, wenn die Nummer größer ist als 9 – vedar

+0

Was willst du, wenn es nicht größer als 9 ist? – AKS

Antwort

2

Sie wahrscheinlich diese wollen

x= 0 if x > 9 else x 

Dies ist die Python-Weg der traditionellen ternäre Operatoren in c wie Sprachen.

Der Code-Schnipsel, die Sie immer x geben oder 1 für x> 9:

x = x > 9 and 0 or x 

Dies als

interpretiert wird
x = (x > 9 and 0) or x 
x = 0 or x 
x = x 

Die andere Version

x = x > 9 and 1 or x 

ist interpretiert als

x = (x > 9 and 1) or x 
x = 1 or x # or gets short-circuited so second expression is not evaluated 
x = 1 
+0

Zum Spaß scheint das auch gut zu funktionieren:' x = int (x> 9 und '0' oder x) ', obwohl die Lösung natürlich schlechter ist – vedar

2

versuchen Sie dies:

x = 0 if x > 9 else x