如何在return语句中将string计算为boolean?

时间:2016-01-12 14:35:36

标签: python boolean truthiness

我在Python 3.4中有这样的函数:

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

当然还有其他方法可以写这个,例如return the_str != ""。是否有更多pythonic方式来编写这个表达式?我熟悉truthy / falsy的概念,所以我知道我可以在if条件下快捷这个:

if not the_str:
    # do stuff

但是if 期望在它的表达式中有一个布尔结果(这是我作为C ++程序员的天真过分简化;我对此并不熟悉标准)。但是,没有任何东西可以强制表达式在return语句中求值为boolean。我试过只返回字符串,只要没有人将返回的值视为字符串,它在boolean context下调用代码就可以了。但是从后置条件的角度来看,我不想返回非布尔类型。

5 个答案:

答案 0 :(得分:7)

这正是bool() function的作用;返回一个基于评估参数truth value的布尔值,就像if语句一样:

return bool(the_str)

请注意,if 期望不是布尔值。它只是评估表达式结果的真值。

答案 1 :(得分:1)

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

空字符串计算结果为False,但其他所有内容的计算结果为True。所以这不应该用于任何解析目的。

在您的情况下只需return bool(the_str)

答案 2 :(得分:1)

if语句自动将字符串计算为布尔值。但是,如果要将字符串作为布尔值返回,则只需执行

return bool(the_str)

答案 3 :(得分:0)

正如一些人所提到的那样,

bool(the_str)绝对是可行的方式。

但是如果你的方法要求给出一个字符串,我也会测试字符串实际上是一个字符串(因为bool(5)bool("this is a string")都将返回true。

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

答案 4 :(得分:-2)

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

使用bool(x)将值转换为布尔值。此函数接受len(the_str) != 0,对其进行求值,将其转换为bool,然后返回值。

bool(x)不是必需的,你可以只有括号,因为它已经返回一个bool,因为默认情况下评估返回boolean。