Как оценить строку как логическое значение в операторе возврата?

У меня есть такая функция в Python 3.4:

def is_value_valid(the_str):
    return len(the_str) != 0

Есть, конечно, другие способы написать это, такие как return the_str != "", Есть ли более питонские способы написания этого выражения? Я знаком с концепциями истина / ложь, поэтому я знаю, что мог бы сократить это в условии if:

if not the_str:
    # do stuff

Но if ожидает логического результата в своем выражении (это мое наивное упрощение здесь как программиста на C++; я не знаком со стандартами для этого). Однако там нет ничего, чтобы заставить выражение вычислять логическое значение в операторе возврата. Я попытался просто вернуть строку, и пока никто не рассматривает возвращаемое значение как строку, он прекрасно работает при вызове кода в логическом контексте. Но с точки зрения постусловия я не хочу возвращать небулев тип.

5 ответов

Решение

Это именно то, что bool() функция делает; вернуть логическое значение, основанное на оценке истинности значения аргумента, как if Заявление будет:

return bool(the_str)

Обратите внимание, что if не ожидает логическое значение. Он просто оценивает истинное значение результата выражения.

>>> bool("foo")
True
>>> bool("")
False

Пустые строки оцениваются как False, но все остальное оценивается как True, Так что это не должно использоваться для каких-либо целей анализа.

Так просто return bool(the_str) в твоем случае.

Оператор if автоматически оценивает строку как логическое значение. Однако, если вы хотите вернуть вашу строку как логическое значение, вы просто сделаете

return bool(the_str)

bool(the_str) это определенно путь, как уже упоминали некоторые.

Но если ваш метод требует, чтобы строка была задана, я бы также проверил, действительно ли строка является строкой (потому что bool(5) а также bool("this is a string") оба вернут истину.

return isinstance(the_str, str) and bool(the_str)

Или когда используется в if заявление:

if isinstance(the_str, str) and the_str:
    # here we are sure it's a string whose length > 0
def is_value_valid(the_str):
    return bool(len(the_str) != 0)

Использование bool(x) преобразует значение в логическое значение. Эта функция занимает len(the_str) != 0, оценивает его, конвертирует в bool, затем возвращает значение.

Bool (x) не требуется, у вас могут быть только круглые скобки, потому что он уже вернет bool, так как оценки возвращают логическое значение по умолчанию.

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