You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手自制Python all函数遇问题:调用后始终输出True

如何正确实现Python的all()函数

你的代码存在两个核心问题,导致无论传入什么参数都返回True:

  • 第一个判断bool(values)==True逻辑完全错误:values是传入参数组成的元组,只要你传了参数(哪怕包含0、空字符串这类假值),bool(values)都会是True,所以函数第一次循环就直接返回字符串'True',根本没检查单个元素的真假。
  • 第二个判断语法和逻辑混乱:any(bool(value))毫无意义(any()需要接收可迭代对象,单个布尔值传进去没有作用),且in (values)==False的写法不符合Python语法,优先级会导致判断逻辑完全偏离预期。

正确实现代码

Python原生all()的逻辑是:所有元素为真则返回True,只要有一个元素为假就返回False;无参数传入时返回True(空集的所有元素都满足条件,属于 vacuous truth)。修正后的代码如下:

def all(*values):
    for value in values:
        if not bool(value):  # 检查当前元素是否为假值
            return False
    return True  # 所有元素为真,或无参数传入时返回True

print(all(0,2,3,3,2))  # 输出False,因为0是假值
print(all(2,3,3,2))    # 输出True
print(all())           # 输出True,和原生all()行为一致

代码说明

  • 遍历每个传入的元素,一旦发现某个元素转为布尔值后是False(比如0、''、[]、{}等),立刻返回False。
  • 循环正常结束意味着所有元素都是真值,或者没有传入任何参数,此时返回True。
  • 返回的是布尔类型的True/False,而非字符串,这才和原生all()的行为匹配。

内容的提问来源于stack exchange,提问作者omar 4k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:52:02