Python-одна строка if-elif-else оператор
Я пытаюсь сжать оператор if-elif-else в одну строку. Я попробовал:
a == 1 ? print "one" : a == 2 ? print "two" : print "none"
но я получил синтаксическую ошибку. Я также пробовал:
print "one" if a == 1 else print "two" if a == 2 else print "none"
но я также получил синтаксическую ошибку.
что я могу сделать, чтобы сделать любой из этих ответов лучше или создать рабочую ответа?
7 ответов
оператор "ternary" в Python является выражением формы
X if Y else Z
здесь X
и Z
- Это значения и Y
- это логическое выражение.
Попробуйте следующее:
print "one" if a==1 else "two" if a==2 else "none"
здесь значение выражения "two" if a==2 else "none"
- это значение, возвращаемое первым, когда a==1
ложно. (Он разбирается как "one" if a == 1 else ( "two" if a==2 else "none")
.) Он возвращает один из "one"
, "two"
или "none"
, который затем передается как единственный аргумент для print
заявление.
Я бы использовал dict
вместо вложенного if
options = {1: "one", 2: "two"}
print options.get(a, 'none')
использовать вложенные condtional выражения (тернарный оператор):
>>> a = 2
>>> print 'one' if a == 1 else 'two' if a == 2 else 'none'
two
используйте индекс кортежа и условное:
print ('one', 'two', 'none')[0 if a==1 else 1 if a==2 else 2]
альтернативно, если отношение a к индексу может быть выражением:
print ('one', 'two', 'none')[a-1 if a in (1,2) else -1]
вы также можете объединить метод индекса кортежа с dict для создания индекса, чтобы получить что-то более читаемое, чем прямой подход dict (IMHO):
print ('one', 'two', 'none')[{1:0,2:1}.get(a, -1)]