Python函数在for循环调用时仅首次返回正确值的原因解析
字典值转键函数的逻辑错误分析
原代码
myDict = { "a":1, "b":2, "c":3 } def get_ky(val): for key, value in myDict.items(): if val == value: return key else: return "no match" myList = [1,2,3] for i in myList: print(get_ky(i))
运行结果
a no match no match
问题原因
问题出在get_ky函数的循环逻辑:
- 传入
1时,循环第一次匹配到"a":1,直接返回"a",结果正确。 - 传入
2时,循环首次取到的是"a":1,此时2 != 1,函数立刻执行else分支返回"no match",完全没机会遍历后续的"b":2。 - 传入
3时同理,仅检查第一个键值对就返回失败,不会继续查找后续项。
修正方案
只有遍历完所有键值对都未匹配时,才返回"no match",修改后的函数如下:
def get_ky(val): for key, value in myDict.items(): if val == value: return key # 遍历结束后仍无匹配才返回 return "no match"
修改后运行代码,会输出正确结果:a、b、c。
内容的提问来源于stack exchange,提问作者nayan
相关产品推荐
相关产品推荐

