关于python:如何在返回语句中将字符串评估为布尔值?

How to evaluate string as boolean in return statement?

我在python 3.4中有一个类似的函数:

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

当然,还有其他的方法来写这个,比如return the_str !=""。有更多的Python式的表达方式吗?我熟悉Truthy/Falsy的概念,因此我知道我可以在if条件下将其简化为:

1
2
if not the_str:
    # do stuff

但是EDCOX1〔1〕期望它的表达式中有一个布尔结果(这是我在这里作为C++程序员的简单化,我不熟悉标准化程序)。但是,没有什么可以强制表达式在RETURN语句中计算为布尔值。我尝试过只返回字符串,只要没有人将返回的值视为字符串,它在布尔上下文下调用代码时就可以正常工作。但从post-condition的角度来看,我不想返回非布尔类型。


这正是bool()函数所做的;返回基于评估参数真值的布尔值,就像if语句将:

1
return bool(the_str)

注意,if不需要布尔值。它只评估表达式结果的真值。


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

1
return bool(the_str)


正如一些人所提到的,bool(the_str)无疑是前进的道路。

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

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

或者在if语句中使用时:

1
2
if isinstance(the_str, str) and the_str:
    # here we are sure it's a string whose length > 0


1
2
3
4
>>> bool("foo")
True
>>> bool("")
False

空字符串对False进行计算,但其他所有值都对True进行计算。因此,这不应该用于任何类型的解析目的。

所以在你的情况下,只需使用return bool(the_str)


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

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

bool(x)不是必需的,您可以只使用括号,因为它已经返回bool,因为计算默认返回bool。