如何在 return 语句中将字符串评估为布尔值?

How to evaluate string as boolean in return statement?

我在 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 语句中没有强制表达式计算为布尔值。我只尝试 returning 字符串,只要没有人将 returned 值视为字符串,它就可以在布尔上下文中调用代码。但是从 post 条件的角度来看,我不想 return 非布尔类型。

这正是参数 bool() function does; return a boolean based on evaluating the truth value 的内容,就像 if 语句一样:

return bool(the_str)

请注意 if 并不 期望 布尔值。它只是计算表达式结果的真值。

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

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

所以在你的情况下 return bool(the_str)

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

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

bool(x) 不是必需的,您可以只使用括号,因为它已经 return 一个布尔值,默认情况下评估 return 布尔值。

正如几个人提到的,

bool(the_str) 绝对是正确的选择。

但是如果你的方法要求给出一个字符串,我也会测试这个字符串是否真的是一个字符串(因为bool(5)bool("this is a string") return 都为真。

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

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

return bool(the_str)