gpt4 book ai didi

python - 空列表的所有内置函数

转载 作者:行者123 更新时间:2023-11-28 19:57:34 27 4
gpt4 key购买 nike

谁能解释为什么在 python 内置 buinction all 中返回 True 在这种情况下 all([])

In [33]: all([])
Out[33]: True

In [34]: all([0])
Out[34]: False

In [35]: __builtins__.all([])
Out[35]: True

最佳答案

我不相信任何其他答案都能真正解决为什么应该是这种情况的问题。

Python 的all() 的定义来自 bool 逻辑。例如,如果我们说“所有的天鹅都是白色的”,那么一只黑天鹅就会反驳这一说法。然而,如果我们说“所有的 unicorn 都是粉红色的”,逻辑学家会认为这是一个真实的陈述,因为没有非粉红色的 unicorn 。或者换句话说,“全部”是 vacuously true .

实际上它给了我们一个有用的不变量。如果 all(A)all(B) 都为真,则 all(A + B) 的组合也为真。如果 all({}) 为假,我们应该有一个不太有用的情况,因为组合两个表达式(其中一个为假)会突然给出意想不到的真结果。

因此 Python 从 bool 逻辑中获取 all([]) == True,并与具有类似结构的其他语言保持一致。

将其带回到 Python 中,在许多情况下,空洞的事实会使算法更简单。例如,如果我们有一棵树并且想要验证所有节点,我们可能会说一个节点是有效的,如果它满足某些条件并且它的所有子节点都是有效的。使用 all() 的替代定义,这变得更加复杂,因为我们必须说,如果它满足条件并且没有子代或其所有子代都有效,则它是有效的。

class Node:
def isValid(self):
return some_condition(self) and all(child.isValid for child in self.children)

关于python - 空列表的所有内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com