整合范围:Lecture 2 至 Lecture 7。内容以课堂笔记为主,并进行了 Markdown 格式整理。
目录
- Lecture 2: Functions
- Lecture 3: Control
- Lecture 4: Higher-Order Functions
- Lecture 5: Environment
- Lecture 6: Sound
- Lecture 7: Functional Abstraction
Lecture 2: Functions
帧与环境
- 帧(Frame)分为全局帧(Global Frame)与局部帧(Local Frame)。
- 求值名称时,从当前帧开始,沿父帧向外查找该名称绑定的值。
- 环境(Environment)是帧(Frame)的连续序列。
Lecture 3: Control
doctest
形式如下:
def divide(n, d):
"""Return the quotient and remainder of dividing N by D.
这里约定使用大写字母代替变量名
>>> q, r = divide(2013, 10)
>>> q
201
>>> r
3
"""
return floordiv(n, d), mod(n, d)
- 通过运行
python -m doctest xxx.py来实现doctest。 - 通过运行
python -m doctest -v xxx.py查看更详细的细节。 - 交互式运行:
python -i xxx.py。
Statements
- Boolean contexts:只关心其真假。
Lecture 4: Higher-Order Functions
关键词
- 迭代(Iteration)
表达式求值与短路
求值调用表达式时,先求值运算符(operator)和各操作数(operands),再把参数值传给得到的函数。
and 与 or 表达式采用短路求值,可在某些情况下跳过后续操作数,从而避免报错。
assert 语句
可指定报错信息,形如:
assert r > 0, "A length must be positive"
该语句在前面的条件为 False 时抛出 AssertionError。
泛化(Generalizations)
编程思想,封装重复的数字与计算过程。
高阶函数(Higher-Order Functions)
接受另一个函数作为参数值,或者以一个函数作为返回值的函数。
Lecture 5: Environment
lambda 函数
lambda 与 def 都可创建函数;lambda 只能包含一个表达式,且不会赋予由 def 提供的内在名称(intrinsic name)。这些差异会体现在环境图(Environment Diagram)中。
柯里化(Currying)
将多参数函数转化为一连串单参数函数的行为。
Lecture 6: Sound
这节没讲啥 ^^
Lecture 7: Functional Abstraction
错误及回溯(Errors & Tracebacks)
- 语法错误(Syntax Errors):代码不符合语法规则,在程序执行前的解析或编译阶段被检测到。
- 运行错误(Runtime Errors):程序运行时检测到的错误。程序会给出回溯信息(Traceback),展示调用路径和异常发生位置,帮助定位问题。
- 逻辑或行为错误(Logical or Behavior Errors):不会报错,但程序内部的逻辑行为错误。
短路(Short Circuiting)
在使用 and 和 or 表达式时,它们只执行到能确定表达式结果的部分就停止(如 True or 1 / 0 不报错),并返回最后一个实际求值的操作数的值。

