首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么[]和bool会回来[]?

为什么[]和bool会回来[]?
EN

Stack Overflow用户
提问于 2018-10-02 09:17:01
回答 3查看 97关注 0票数 4

我试图在这样的函数中返回一个布尔值:

代码语言:javascript
运行
复制
return mylist and any(condition(x) for x in mylist)

如果列表是空的,或者其中的任何元素满足条件,则行为应该是返回True。我使用第一个操作数作为短路,因为如果列表为空,any将返回True,这不是我想要的。

我希望[] and boolval返回False,因为列表是空的,但令我惊讶的是,它返回[],无论boolvalTrue还是False。我希望第一个操作数会自动作为布尔值计算,因为它涉及比较操作,而不是正在发生的任何事情。

我并不是真正地问如何解决我的问题,这很容易通过显式类型转换:bool(mylist)来完成,而是询问正在发生什么以及为什么发生。

编辑:当我问“为什么”会发生这种情况时,我并不仅仅是在寻找“事实”,因为它们已经在链接的重复问题中得到了解释,但也找到了实现这种行为的原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-02 09:22:39

andor运算符不返回True/False。他们返回--最后一个被评估为的东西(在其他动态语言中也是如此,例如。( javascript)

The 官方文件描述

  • 对于and,第一个假值或最后一个操作数
  • 对于or,第一个真实值或最后一个操作数

这是由设计完成的,所以您可以创建像return username or 'guest'这样的表达式。因此,如果要保证返回布尔值,则必须

代码语言:javascript
运行
复制
return bool(x or y)

而不是

代码语言:javascript
运行
复制
return x or y
票数 6
EN

Stack Overflow用户

发布于 2018-10-02 09:22:18

因为正如khelwood所说:

如果x and y是falsey,则给x,否则就给y

这就是重点,(and不是or:-),所以最好还是:

代码语言:javascript
运行
复制
return all([my_list,any(condition(x) for x in my_list)])
票数 1
EN

Stack Overflow用户

发布于 2018-10-02 09:33:38

这与python如何计算表达式有关。

python认为空列表为false,这意味着“和”之后的代码不会被执行,因为这不会改变结果。

Python不需要将空列表转换为bool,因为它不与任何东西相比较,只需将其作为空列表返回即可。

这不应该为您改变任何东西,如果您测试函数的返回值,它的计算方式将与函数返回False的方式相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52605441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档