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

voi*_*ter 2 python boolean truthiness

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

def is_value_valid(the_str):
    return len(the_str) != 0
Run Code Online (Sandbox Code Playgroud)

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

if not the_str:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 7

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

return bool(the_str)
Run Code Online (Sandbox Code Playgroud)

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

  • @kojiro:有大量的反模式被广泛使用,等待成为bug.喜欢[这一个](https://searchcode.com/?q=super%28type%28self%29+lang%3APython)或[这一个](https://searchcode.com/?q=super%28self. __class __ + lang%3APython),参见[为什么Python 3.x的超级()魔术?](/sf/answers/1372641791/).有很多程序员认为*不了解他们的工艺*. (3认同)
  • @kojiro:如果函数承诺返回一个布尔值,最好实际返回一个布尔值.这使得界面更清晰. (2认同)