为何映射函数capitalize_all仅返回单个元素而非预期的三个?
为啥你的
capitalize_all函数只返回单个元素? 嘿,我一眼就瞅到问题出在哪了!咱们来拆解你的代码慢慢说:
首先看你写的核心代码:
t = ['a','b','c'] def capitalize_all(t): res = [] for s in t: res.append(s.capitalize()) return res # 就是这行的缩进搞砸了! capitalize_all(res) # 这里还有个小错误,后面聊
核心问题:return语句的缩进位置错了
你把return res写在了for循环的内部,这意味着循环刚处理完第一个元素(把'a'转成'A'塞进res),函数就直接把当前的res返回了——后面的'b'和'c'连被处理的机会都没有!
正确的写法是把return res移到循环外面,等所有元素都处理完再返回结果:
t = ['a','b','c'] def capitalize_all(t): res = [] for s in t: res.append(s.capitalize()) return res # 缩进和for对齐,等循环跑完再返回 # 调用的时候要传你定义好的t,不是res(res是函数内部变量,外面找不到) final_result = capitalize_all(t) print(final_result) # 这下就能得到 ['A', 'B', 'C'] 啦!
顺便提两个小问题
- 你原来调用
capitalize_all(res)的时候,res是函数内部才定义的变量,外部根本不存在,运行会直接报NameError,得改成传t才行。 - 你试的
capitalize_all('b')这种调用,虽然能跑,但因为字符串是可迭代对象,函数会遍历这个字符串的每个字符(这里只有一个'b'),处理完就返回['B']——如果你的函数是专门用来处理列表的,最好还是传列表类型的参数哦。
改完缩进后,函数就能完整遍历所有元素,res自然就会包含三个大写后的元素啦!
内容的提问来源于stack exchange,提问作者Alexander Biel
相关产品推荐
相关产品推荐

