Python 进阶
高阶函数与闭包
理解函数是一等公民,掌握闭包
- 函数作为参数和返回值
- 理解闭包和自由变量
- 编写简单的装饰器雏形
函数是一等公民
Python 中函数可以赋值给变量、作为参数传递、作为返回值:
示例代码(可运行)
Python 0%
闭包
内部函数用了外部函数的变量,外部函数返回这个内部函数,这就是闭包。
示例代码(可运行)
Python 0%
💡闭包的本质
闭包就是函数加上它引用的外部变量。外部函数执行完,内部函数还能记住那些变量。
简单计数器
示例代码(可运行)
Python 0%
预测输出
def f(x):
def g(y):
return x + y
return g
add5 = f(5)
print(add5(3))找 Bug内部函数改外部变量,得加nonlocal声明。
def counter():
n = 0
def inc():
n += 1
return n
return inc
填空题填写空白处的代码
def make_adder(n):
def adder(x):
return x + n
return adder
add10 = make_adder(10)
print(add10(5)) #
选择题
闭包中修改外部变量需要?
选择题
在 for 循环里创建的多个 lambda 都引用了循环变量,循环结束后调用,它们看到的值通常是?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
list 底层是一段连续的指针数组,容量不够时整体扩容(CPython 约按 1.125 倍)。因此按下标取元素是 O(1),末尾 append 均摊 O(1),但在头部 insert(0,…) 或 pop(0) 要搬动全部元素、是 O(n)。dict/set 基于哈希表,平均查找 O(1) 但更耗内存。选对数据结构,往往比抠语法更影响性能。
挑战任务
闭包挑战
简单+50 XP
用闭包创建一个密码验证器。
闭包挑战
Python 0%
2 个测试用例
课后作业
缓存函数
中等+20 XP
用闭包实现简单的记忆化缓存。
缓存函数
Python 0%
1 个测试用例