我在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下调用代码就可以了。但是从后置条件的角度来看,我不想返回非布尔类型。
答案 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。