【发布时间】:2019-03-07 09:49:17
【问题描述】:
我试图在这样的函数中返回一个布尔值:
return mylist and any(condition(x) for x in mylist)
如果列表为空或其中任何元素满足条件,则行为应该是返回True。我将第一个操作数用作短路,因为如果列表为空,any 将返回True,这不是我想要的。
我希望[] and boolval 返回False,因为列表为空,但令我惊讶的是,无论boolval 是True 还是False,它都会返回[]。我希望第一个操作数被自动评估为布尔值,因为它涉及比较操作,而不是发生任何事情。
我并不是真的在问如何解决我的问题,这很容易通过显式类型转换完成:bool(mylist),而是问发生了什么以及为什么。
编辑:当我问“为什么”会发生这种情况时,我不仅在寻找“事实”,因为它们已经在链接的重复问题中进行了解释,而且还包括实施这种行为背后的原因。
【问题讨论】:
-
x and y如果x是假的,则给出x,否则给出y。这是and在布尔值上工作方式的概括。 -
如果你想在这种情况下输出布尔值,你应该通过
return bool(mylist) and ...强制执行它。 -
@alec_djinn OP 在问题中涵盖了这一点。
-
@khelwood 我的错,太快了。
标签: python python-2.7