ok

ok 是 CS 61A 中用于测试作业的自动化工具,常见用法如下:

  • python3 ok -q question_name
    → 运行某个题目的测试(非交互)
  • python3 ok -q question_name -i
    在测试失败时打开交互式解释器(重点)
  • python3 ok -q question_name --trace
    → 打开可视化追踪(用来调试但不是交互式)
  • python3 -i lab01.py
    → 打开 Python 并加载该文件,但不是用来调试测试的

Debugging

IndentationError

在 Python 中,4 个空格和一个 Tab(\t)不是同一个东西!

  • 一个 Tab 字符(\t)并不是等同于 4 个空格;

  • 它是一个单独的字符,长度显示上可能是 4 或 8 格,取决于编辑器设置;

  • 而 4 个空格是 4 个真正的空格字符。

traceback

  • 哪行代码写错了:倒数第二行
  • 错误类型:最后一行
  • 是谁导致谁:往上看调用栈

frame diagram

栈帧(frame):1.global 2.函数调用

变量:每个栈帧中定义的变量名和对应值。

堆内存(heap)引用(如列表、对象、字典等复杂类型)。

返回值(如果已返回)。

全局变量 / 内建变量(如 __main__ frame)

lambda

lambda 是 Python 中用来创建匿名函数的一种方式:它相当于快速定义了一个函数,但 没有函数名

lambda 返回的是函数对象,而不是值!