新手自制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
相关产品推荐
相关产品推荐

