整合范围:Lecture 15 至 Lecture 17。内容以课堂笔记为主,并进行了 Markdown 格式整理。
目录
Lecture 15: Mutability
可变性(Mutability)
描述对象能不能被原地修改的性质:
- 可变(Mutable)对象包括
list、dict(dictionary)等。 - 不可变(Immutable)对象包括
int、float、tuple等。
原地修改与重新绑定
原地修改指对象身份不变,而对象的内容发生变化。例如,执行 a = 1 后再执行 a = 2,事实上是让 a 指向另一个对象,前后对象的 id 不同;而对 list 进行原地操作时,列表对象的 id 不变。
Python 中的直接赋值不会复制对象。执行 a = b 后,a 和 b 会绑定到同一个对象;对于可变(Mutable)对象尤其需要注意:
- 若对这个共享对象进行原地修改,通过
a和b都能观察到变化。 - 若只是让
b重新绑定到另一个对象,则不会影响a。
元组(Tuple)
与列表类似,区别在于元组本身不可变(Immutable)。只有当元组中的所有元素都可哈希(hashable)时,元组才可作为字典的键。
一个元组即使包含可变对象,其本身仍然不可变,但其中的可变对象可以被原地修改。例如,([1, 2], 3) 是包含列表的元组,因此不可哈希,不能作为字典的键。
同一性运算符(Identity Operator)
| 判断 | 表达式 | 含义 |
|---|---|---|
| 同一(Identity) | <exp0> is <exp1> |
二者是否指向同一个对象(object) |
| 相等(Equality) | <exp0> == <exp1> |
二者的值(value)是否相同 |
Lecture 16: Iterators
迭代器(Iterators)
一个容器(Container)可以生成一个按顺序访问其元素的迭代器。
iter(iterable):返回一个迭代器。next(iterator):返回迭代器的下一个元素。
用于迭代的内置函数(Built-in Functions for Iteration)
| 函数 | 迭代内容 |
|---|---|
map(func, iterable) |
依次产生 func(x) |
filter(func, iterable) |
依次产生使 func(x) 为真的 x |
zip(first_iter, second_iter) |
依次产生 (x, y) |
reversed(sequence) |
反向迭代 sequence |
以上函数均返回迭代器。
Lecture 17: Generators
生成器和生成器函数(Generators and Generator Functions)
一个函数的函数体中只要包含 yield 语句,它就是生成器函数(Generator Function)。调用生成器函数会返回一个生成器(Generator),且不会立即执行函数主体。
生成器的执行
- 首次调用
next(generator)时,函数从开头执行,直到遇到下一条yield语句并返回该值。 - 后续调用
next(generator)时,函数从上一次yield暂停之后的位置继续执行,直到遇到下一条yield。 - 生成器结束后,再调用
next(generator)会抛出StopIteration。 yield from iterator_or_iterable:依次产出迭代器或可迭代对象中的所有元素。


