2

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

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

当然还有其他的写法,比如return the_str != "". 有没有更多的 Pythonic 方式来编写这个表达式?我熟悉真/假的概念,所以我知道我可以在 if 条件下简化它:

if not the_str:
    # do stuff

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

4

5 回答 5

7

这正是该bool()函数的作用;根据评估参数的真值返回一个布尔值,就像if语句一样:

return bool(the_str)

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

于 2016-01-12T14:41:37.160 回答
1

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

return bool(the_str)
于 2016-01-12T14:54:39.250 回答
1
>>> bool("foo")
True
>>> bool("")
False

空字符串评估为False,但其他所有字符串评估为True。所以这不应该用于任何类型的解析目的。

所以就return bool(the_str)你的情况。

于 2016-01-12T14:41:46.777 回答
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
于 2016-01-12T14:45:13.340 回答
-2
def is_value_valid(the_str):
    return bool(len(the_str) != 0)

使用 bool(x) 将值转换为布尔值。这个函数接受len(the_str) != 0,评估它,将它转换为布尔值,然后返回值。

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

于 2016-01-12T14:43:10.970 回答