Python: упростить оператор возврата (триграф?)

Рассмотрим следующий простой код:

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;

Есть ли что-то подобное в питоне?

Отвечает ли это на ваш вопрос? Есть ли в Python тернарный условный оператор?

PM 77-1 25.11.2022 17:53

Триграфы - это совсем другое. Вы имеете в виду тернарный оператор.

Sören 25.11.2022 18:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
75
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Более общим решением было бы использование следующей строки кода. Он исключает подгонку с длиной 0, поскольку специально проверяет оператор None. В этом случае пустая строка невозможна, но более явно.

return re.match("^[a-zA-Z]+", s) is not None

Спасибо, я помню, я видел этот синтаксис в другом месте, но забыл.

Mark 25.11.2022 19:41
Ответ принят как подходящий

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))

Я думаю, вы имеете в виду «тройной», а не «триграф»

CoffeeTableEspresso 25.11.2022 18:24

ой. не очень проснулся. Спасибо. @CoffeeTableЭспрессо

RufusVS 25.11.2022 23:30

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:
   ...

Другие вопросы по теме