Рассмотрим следующий простой код:
import re
def my_match(s):
if re.match("^[a-zA-Z]+", s):
return True
else:
return False
Есть ли способ свернуть это в один оператор return
? В C
мы могли бы сделать, например:
return match("^[a-zA-Z]+", s) ? true : false;
Есть ли что-то подобное в питоне?
Триграфы - это совсем другое. Вы имеете в виду тернарный оператор.
Более общим решением было бы использование следующей строки кода. Он исключает подгонку с длиной 0, поскольку специально проверяет оператор None. В этом случае пустая строка невозможна, но более явно.
return re.match("^[a-zA-Z]+", s) is not None
Спасибо, я помню, я видел этот синтаксис в другом месте, но забыл.
Python также поддерживает это, хотя синтаксис немного отличается от большинства языков.
import re
def my_match(s):
return True if re.match("^[a-zA-Z]+", s) else False
В общем, синтаксис Python — это val_when_true if cond else val_when_false
, по сравнению с cond ? val_when_true : val_when_false
, который вы видите в других языках.
Однако в вашем конкретном случае вы можете просто написать:
import re
def my_match(s):
return bool(re.match("^[a-zA-Z]+", s))
Другие ответы показывают троичный эквивалент в Python. Но поскольку Python также присваивает truthiness
значениям и выражениям, вы можете просто использовать:
my_match = lambda s : bool(re.match("^[a-zA-Z]+", s))
Я думаю, вы имеете в виду «тройной», а не «триграф»
ой. не очень проснулся. Спасибо. @CoffeeTableЭспрессо
re.match()
возвращает значение, достоверность которого можно оценить. Поэтому, если вам не нужно возвращать точные значения True
и False
, вы можете просто напрямую вернуть результат функции match()
:
def my_match(s):
return re.match("^[a-zA-Z]+", s)
И тогда звонящий может сказать:
if my_match(x):
...
else:
...
Хотя в этом конкретном случае my_match()
становится в основном бесполезной функцией-оболочкой, и вы можете просто вызвать re.match(...)
напрямую.
if re.match(...):
...
else:
...
Отвечает ли это на ваш вопрос? Есть ли в Python тернарный условный оператор?