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;
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;
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
Uważam, że ten skrót "m = (5, 100) [t == 0]" jest nieco dziwny pod względem pozycjonowania wartości, ale działa on –
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. 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
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
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 .
możliwy duplikat [python? (warunkowy/ternarny) operator dla przydziałów) (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –
możliwy duplikat [Potencjalnego Operatora Pythona] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay