整合范围:Lecture 2 至 Lecture 7。内容以课堂笔记为主,并进行了 Markdown 格式整理。

目录


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),再把参数值传给得到的函数。

andor 表达式采用短路求值,可在某些情况下跳过后续操作数,从而避免报错。

assert 语句

可指定报错信息,形如:

assert r > 0, "A length must be positive"

该语句在前面的条件为 False 时抛出 AssertionError

泛化(Generalizations)

编程思想,封装重复的数字与计算过程。

高阶函数(Higher-Order Functions)

接受另一个函数作为参数值,或者以一个函数作为返回值的函数。


Lecture 5: Environment

lambda 函数

lambdadef 都可创建函数;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)

在使用 andor 表达式时,它们只执行到能确定表达式结果的部分就停止(如 True or 1 / 0 不报错),并返回最后一个实际求值的操作数的值。