2011-12-14 5 views
16

Есть ли версия Python следующего if - заявление else в C++ или подобном заявлении, как это:Python заявление коротким «если еще»

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

Возможный дубликат [python? (условный/тернарный) оператор для присвоений] (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –

+0

Возможный дубликат [Терминальный оператор Python] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay

ответ

38
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

+0

Я нахожу это сокращение "m = (5, 100) [t == 0]" немного странным с точки зрения позиционирования значения, но оно работает –

7
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

-1. Тернарный оператор * гораздо менее уродливый *, чем длинный, если для простых операций, подобных этому, довольно явный и * путь * проще. Догма уродливая. – naught101

13

Конструкцию вы имеете в виду, называется ternary operator. Python имеет версию этого (начиная с версии 2.5), как это:

x if a > b else y 
3

Существует также:

m = t==0 and 100 or 5 

Поскольку 0 является falsy значение, мы могли бы написать:

m = t and 5 or 100 

Это эквивалентно первому ,

Смежные вопросы