用 Mentor AI 攻克 Python 练习:不抄答案也能修好可变默认参数
难度:入门 · 来源:Real Python · 原文发布:2026-11-12
你将学到什么
- 在 Real Python 练习页用 Mentor AI 定位失败的测试并读懂失败原因,且不必把代码和报错手动粘贴进对话。
- 用“先预测输出、再让 AI 校验推理”的方式,确认自己真的理解了可变默认参数这个经典缺陷。
- 学会向 AI 明确索取“提示而非解法”,并进一步让它反问、审查与出题。
前置条件
- 一个开通 Mentor AI 权限的 Real Python 会员账号(需登录,可先开 7 天免费试用)。
- 基础 Python:会定义函数、使用默认参数、用
.append()往列表追加元素。 - 提前打开会员课程 Python's None 中的练习 Fix the Sticky Default List,与本文并排切换。
练习起始代码是一个本应把元素追加进传入列表并返回同一个列表的函数:
def add_element(new_elem, starter_list=[]):
"""Append new_elem to starter_list and return the list."""
starter_list.append(new_elem)
return starter_list
原文给出的缺陷复现是:连续两次不传列表调用时,第二次返回 [1, 2] 而不是 [2]——第一次的 1 留在了共享的默认列表里。
步骤
-
先跑测试,再求助。 编辑器上方有 Reset 和 Run Tests 两个按钮,不改任何代码直接点 Run Tests。右侧 Test Results 面板会列出六个测试,例如 starter_list no longer has a mutable default,初始全部失败。点开任一失败测试,可看到三样东西:错误说明、练习作者写的短提示,以及一个 Explain why this test failed 链接。先读消息和提示,不够再用下一步。
-
一键让 Mentor AI 解释失败原因。 点 Explain why this test failed,聊天面板会自动打开并带上该测试信息,无需自己粘贴。Mentor AI 回答前会显示 Checking what's on your page、Looking at your exercise attempts 之类的状态行,说明它在读页面和你的提交记录。示例回复要点是:测试检查的是函数声明的默认值,签名里仍是
starter_list=[],属于可变对象,应改用不可变的None作为默认值。面板可用右上角箭头收起,再用右下角圆形按钮打开,对话记录保留;圆形按钮挡住内容时可以拖动。 -
改代码前先自检理解。 假设函数刚刚定义、默认列表还是空的,先不运行,预测下面三次连续调用的结果:
add_element(5)
add_element(6)
add_element(7, [])
把你的猜测发进对话框,原文示例的说法是:
Starting from a freshly defined function, my guess: add_element(5) gives ___ , then add_element(6) gives ___ , and add_element(7, []) gives ___ . Am I right? Don’t run it yet, just tell me if my reasoning holds.
再追问原理,并且可以指定回答长度,例如:
Why does Python only create that default list once? Give me the short version with an everyday analogy, two or three sentences max.
- 按提示改代码并重跑测试。 常见的第一版修法是:
def add_element(new_elem, starter_list=None):
"""Append new_elem to starter_list and return the list."""
if not starter_list:
starter_list = []
starter_list.append(new_elem)
return starter_list
再次点 Run Tests,此时五个测试通过,只有 Uses a passed-in empty list 仍失败,消息为 Expected: ['a'] 与 Got: []。原因是该测试检查的不是返回值,而是调用方自己传入的那个列表;而 if not starter_list 无法区分“空列表”和 None。
- 针对具体测试要提示,而不是要答案。 用鼠标选中失败测试的消息文本,旁边会弹出 Ask Mentor AI 按钮,点击后选中文本会附到下一条消息上。提问时明确说明只要提示,例如:
I changed the default to None and everything passes except this one. Give me a hint, not the fix.
示例回复没有给出改好的代码,而是反问引导:“调用方传入 [] 时 if not starter_list 求值是什么?这个条件能区分空列表和 None 吗?”按这两个问题自己想一版改法,卡住就再要一条提示。
常见坑与注意事项
- 测试一直红时最容易直接打开官方 solution 抄一遍,测试变绿但基本学不到东西——原文正是把这个当作要避开的做法。
- Mentor AI 每次回答都是新生成的,不会与文中示例逐字一致,把它当示范而非标准答案。
- 提问时不说明“只要提示”,很容易直接被给出修复代码;想要思考过程就得像步骤 5 那样写清楚。
- 解释太长或太难懂时,直接在提问里限定句数和风格(如“两三句话 + 生活类比”),原文明确支持这种调法。
- 原文在步骤 4 结尾处被截断:目录中的步骤 5(解释不够时索取示例)、步骤 6(让 AI 审查解法并复述回去)、步骤 7(小测验)的具体内容不在可见文本内,需到原文查看。
原文链接:https://realpython.com/mentor-ai-coding-exercise/
原文:Learn With Mentor AI: Working Through a Coding Exercise(本文为采集智能体整理的导读,版权归原作者,请阅读原文获取完整内容)
评论(0)