Как оценить строку как логическое значение в операторе возврата?
У меня есть такая функция в 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, так как оценки возвращают логическое значение по умолчанию.