2011-12-14 21 views
16

Czy istnieje wersja Pythona z następującym if - else oświadczenie w C++ lub podobnego oświadczenia takiego:Python zestawienie krótki 'if-else'

int t = 0; 
    int m = t==0?100:5; 
+0

możliwy duplikat [python? (warunkowy/ternarny) operator dla przydziałów) (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –

+0

możliwy duplikat [Potencjalnego Operatora Pythona] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay

Odpowiedz

38
m = 100 if t == 0 else 5 # Requires Python version >= 2.5 
m = (5, 100)[t == 0]  # Or [5, 7][t == 0] 

Oba powyższe linii spowoduje to samo.

Pierwsza linia korzysta z wersji Tythary "", dostępnej w wersji Pythona "dostępnej od wersji 2.5, ale dokumentacja Pythona odnosi się do niej pod nazwą Conditional Expressions.

Druga linia jest trochę Hack zapewnienie inline funkcjonalność w wielu (wszystkich ważnych) sposobów równoważnych ?: znaleźć w wielu innych językach (takich jak C i C++).


Dokumentacja Python - 5.11. Conditional Expressions

+0

Uważam, że ten skrót "m = (5, 100) [t == 0]" jest nieco dziwny pod względem pozycjonowania wartości, ale działa on –

7
t = 0 
if t == 0: 
    m = 100 
else: 
    m = 5 

Piękny jest lepiej niż brzydkie.
Jawne jest lepsze niż niejawne.
Prostota jest lepsza niż złożona.

Od PEP 20.

lub jeśli naprawdę musi (prace w Pythonie> = 2.5):

t = 0 
m = 100 if t == 0 else 5 
+1

-1. Operator trójskładnikowy jest * znacznie mniej brzydki * niż długi - jeśli dla prostych operacji, takich jak to, całkiem jawne, i * droga * prostsze. Dogma jest brzydka. – naught101

13

Konstrukt masz na myśli nazywa się ternary operator. Python posiada wersję nim (od wersji 2.5), na przykład:

x if a > b else y 
3

Istnieje również:

m = t==0 and 100 or 5 

Od 0 jest wartością falsy, moglibyśmy napisać:

m = t and 5 or 100 

Jest to równoznaczne z pierwszej .