闭包、装饰器与函数工具
面向对象与高级 Python#Python全栈#第三阶段#面向对象与高级 Python#闭包、装饰器与函数工具约 660 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
什么是闭包?
追问 外层函数返回后,内层函数为什么仍能使用外层变量?与模块全局变量有什么不同?
循环中创建多个 lambda,为什么可能都读取最后一个循环值?
追问
[lambda: i for i in range(3)] 应如何验证和修复?默认参数绑定与工厂函数有什么差异?Python 装饰器的基本工作方式是什么?
追问
@decorator 与 func = decorator(func) 如何对应?包装函数与原函数分别何时执行?如何编写一个统计函数耗时的装饰器?
追问 参数、返回值、异常与计时范围如何保持原行为?适合测耗时的时钟如何选择?
为什么包装函数常使用 *args 和 **kwargs?
追问 这是否意味着可以任意改变原函数调用约定?参数重复错误应怎样传播?
functools.wraps 解决什么问题?
追问 函数名、文档、
__wrapped__ 与框架检查可能受什么影响?是否等于完整复制原函数行为?带参数的装饰器为什么通常多一层函数?
追问 装饰器配置、接收原函数和执行包装逻辑分别位于哪一层?
多个装饰器叠加时,应用顺序与执行顺序如何理解?
追问 用记录进入、退出的两个装饰器验证;鉴权与缓存顺序不同可能影响什么?
functools.partial() 与闭包各适合什么场景?
追问 固定部分参数与封装额外状态有什么区别?调用时覆盖参数有哪些约束?
lru_cache 适合哪些函数,不适合哪些函数?
追问 参数可哈希性、可变返回值、用户权限、外部数据变化和缓存容量如何评估?
包装与缓存工具可查阅 Python 官方 functools 文档,并验证元信息和业务行为是否符合预期。