python中all()的“奇怪”现象

来源:互联网 发布:哪个网络电话软件好 编辑:程序博客网 时间:2024/04/29 22:18

先看一下下面几条语句结果,可能会觉得不是那么符合直觉。

>> all([])True>> all([[]])False>> all([[[]]])True

一开始在项目中发现all([])返回True,感觉很不理解。

其实all()的原理差不多是这样的:

def all(iterable):    for x in iterable:        if bool(x) is False:  # 只要有一个不满足,就返回False            return False    return True

① 对于all([]), 列表没有元素,也就没有不满足的,于是就返回True了
② 对于all([[]]), 列表有1个元素,这个元素是[],bool([])是False,所以这个元素不满足,等价于 all([False]),所以整个断言就失败了,返回False
③ 对于all([[[]]]),列表有1个元素,这个元素是[[]], 即有一个空列表的列表,bool([[]])是True,所以这个元素满足,等价于all([True]),所以整个断言成功,返回True

对于②和③来说,它们都是有1个元素,区别在于元素[]和[[]],一个是没有东西, 一个是有一个东西,虽然这东西是空列表。bool(没有东西)是False, bool(有东西)是True。

1 0
原创粉丝点击