Python自定义all函数遍历全False值字典返回True,原因是什么?
问题原因与修正
你的自定义函数输出始终为True,核心有两个问题:
1. 遍历字典时迭代的是键而非值
在Python中,直接遍历字典(for element in _iterable),拿到的是字典的键,不是键对应的值。你的字典键是'x'和'y',这些非空字符串在布尔判断中永远为True,所以函数第一次循环就触发return True,完全没用到字典里的False值——哪怕你修改字典的值,只要键是非空字符串,结果都不会变。
2. 自定义all的逻辑与内置all完全相反
Python内置all()函数的规则是:所有元素为真时返回True,只要有一个元素为假就返回False。但你的代码逻辑是「只要有一个元素为真就返回True,遍历完都没找到才返回False」,这其实是内置any()函数的逻辑。
修正后的代码
要实现正确的自定义all函数,需要同时修正遍历对象和逻辑:
_iterable = {'x': False, 'y': False} def all(_iterable): # 遍历字典的值而非键 for element in _iterable.values(): # 只要有一个元素为假,立即返回False if not element: return False # 所有元素都为真时返回True return True print(all(_iterable)) # 输出:False
内容的提问来源于stack exchange,提问作者Said Lbhja
相关产品推荐
相关产品推荐

