Есть ли версия Python следующего if
- заявление else
в C++ или подобном заявлении, как это:Python заявление коротким «если еще»
int t = 0;
int m = t==0?100:5;
Есть ли версия Python следующего if
- заявление else
в C++ или подобном заявлении, как это:Python заявление коротким «если еще»
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]
Оба указанных выше линий приведет к тому же.
Первая строка использует версию языка Python о «тройном оператора» доступен, начиная с версии 2.5, хотя документация Python относится к нему как Conditional Expressions
.
Вторая строка немного хака, чтобы обеспечить функциональность встроенной во многих (все важных) способов, эквивалентных ?:
найти во многих других языках (например, C и C++).
Документация Python - 5.11. Conditional Expressions
Я нахожу это сокращение "m = (5, 100) [t == 0]" немного странным с точки зрения позиционирования значения, но оно работает –
t = 0
if t == 0:
m = 100
else:
m = 5
Красивое лучше, чем уродливое.
Явный лучше, чем неявный.
Простой лучше, чем сложный.
От PEP 20.
Или, если вы действительно, действительно необходимо (работает в Python> = 2.5):
t = 0
m = 100 if t == 0 else 5
-1. Тернарный оператор * гораздо менее уродливый *, чем длинный, если для простых операций, подобных этому, довольно явный и * путь * проще. Догма уродливая. – naught101
Конструкцию вы имеете в виду, называется ternary operator. Python имеет версию этого (начиная с версии 2.5), как это:
x if a > b else y
Существует также:
m = t==0 and 100 or 5
Поскольку 0 является falsy значение, мы могли бы написать:
m = t and 5 or 100
Это эквивалентно первому ,
Возможный дубликат [python? (условный/тернарный) оператор для присвоений] (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –
Возможный дубликат [Терминальный оператор Python] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay