-函数 Lecture 4 - Functions
-函数 Lecture 4 - Functi
看清函数不只是代码段:从映射、参数传递到闭包的完整运行图谱
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
-函数 Lecture 4 - Functi
看清函数不只是代码段:从映射、参数传递到闭包的完整运行图谱
Lecture 4 Introduction
你已经写过无数个函数——def f(x): return x*2,输入 3 永远返回 6。现在要把这种直觉上升为严格定义,看清它的边界。
同一 key 永远映射到同一 value;不同 key 可撞同槽(允许多对一)
Creating Functions
你已经会写顺序执行的代码了,但同一段逻辑要反复用怎么办?就像你需要一份可重复使用的菜谱——这就要创建函数。
菜谱写一次可反复做菜,函数定义一次可反复调用
Environments
我们写出了函数,但解释器到底怎么知道每个名字指向哪个值?Environments 就是那张「名字→值」的对照表,负责求值时的簿记。
进子房间只看本房间门牌;找不到就探头看父房间,直到最外层门厅
Computing Powers as an E
前面学了怎么定义函数、环境怎么记录绑定。现在用一个经典例子——算 x 的 n 次方——看一个函数定义里究竟藏着什么。
菜谱里藏着步骤,函数定义里藏着递归过程;吃饭的人和调用方都只看到最终结果
Understanding Variable B
上一页我们看到环境是一张「名字→值」的查找表。那这张表里的条目究竟怎么来的?函数被调用时,参数名怎么就跟具体值绑上了?这一页拆解「绑定」这个动作本身。
角色名(变量)只在该场戏(作用域)内指代该演员(值);场景结束绑定解除;嵌套场可重绑同名角色
Understanding Root Findi
前几页我们写了各种函数:为什么还要专门写函数?最直白的答案之一,是把像「求根」这种反复要做的计算,封装成可复用的黑盒。
理想温度对应 f(x)=0;每试一次水温就是一次迭代评估
Modules
函数写多了,一个文件装不下——power()、root()、几十个工具散落各处。模块(module)就是把工具分门别类装进抽屉的方式,让代码可组织、可复用、可按需取用。
整个箱子=模块;单个工具=函数;拎箱或挑工具=不同导入方式
本节要点
- ✓函数是一等公民:可作参数、返回值与数据结构元素
- ✓环境帧随调用压栈,形参在其中绑定实参值
- ✓名字是绑定而非容器,赋值即重新指向
- ✓嵌套函数捕获外层变量名,构成闭包
- ✓模块是命名空间,导入仅引入绑定名
课后思考
先自己想,再展开参考答案对照思路。
参考答案不是。函数体里的 `x = 5` 创建的是局部 frame 的绑定;外面的 `x = 5` 改的是当前 frame(通常是全局)。两个 x 分属不同 frame。
参考答案后 def 的覆盖前面的——名字在当前 environment 里只指向最新绑定。这和普通变量重新赋值完全同构。
参考答案不会。`from A import f` 在那一刻把函数对象绑到 B 的 f 名字上,之后 A 里改名或重新 def 都不影响 B 已持有的引用。