考虑以下代码:返回变量的真实性而不是其值?
test_string = 'not empty'
if test_string:
return True
else:
return False
我知道我可以构建一个条件表达式来做到这一点:
return True if test_string else False
但是,如果当我是一个布尔值是真还是假的,我不喜欢测试d而只是返回布尔值。我将如何回报它的真实性?
考虑以下代码:返回变量的真实性而不是其值?
test_string = 'not empty'
if test_string:
return True
else:
return False
我知道我可以构建一个条件表达式来做到这一点:
return True if test_string else False
但是,如果当我是一个布尔值是真还是假的,我不喜欢测试d而只是返回布尔值。我将如何回报它的真实性?
快速回答:)。投票了 – Khamidulla 2014-12-04 00:56:09
我做了一些更多的研究,并发现一本书说真实是通过首先调用'__nonzero__'进行检查的,如果未定义则调用'__len__'。我猜这与bool()的工作原理是一样的,对吗? – 2014-12-04 01:17:23
这取决于你使用的是什么版本的Python。在Python 2.x中,'bool()'将调用'__nonzero__',或者如果没有实现'__len__'。如果这两个都没有实现,那么它将返回'True'。这是一个[参考](https://docs.python.org/2/reference/datamodel.html#object.__nonzero__)。然而,在Python 3.x中,'bool()'首先调用'__bool__',它替代'__nonzero__'。有关参考资料,请参阅我答案中的链接。 – iCodez 2014-12-04 01:21:24
相关:http://stackoverflow.com/q/8205558/674039 – wim 2014-12-04 00:59:14
我看不出有什么区别,一个空字符串将评估为False,反之亦然为非空字符串 – 2014-12-04 00:59:35
@PadraicCunningham我用一个字符串作为一个简单的例子。通常我只能使用该对象就可以逃脱。我的实际代码是检查服务是否正在运行。如果没有回应,我想返回False。如果我确实得到了答复,我实际上并不关心它的价值。我得到回应的事实就足够了。问题是我不想提供响应给我的用户。 – 2014-12-04 01:08:19