Python singledispatch:第二个参数不参与选路,bool 也会走整数分支 给一种操作安排多种实现写一个小型导出器时,数字要补零,文字要原样保留,布尔值要显示开关状态。开始用几个判断就够了,但类型不断增加后,可以把同一种操作的实现分别注册到 singledispatch。调用入口仍是一个函数... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python graphlib 依赖排序:字典里要写前置任务,完成后才能放行下一步 先把“依赖谁”写清楚制作一份报告时,抓取资料后才能校验,校验通过后才能计算图表与排版,最后才能打包。若只是按函数在文件里的位置执行,流程一长就难以看清先后关系。标准库 graphlib 可以把这些约束转成可执行顺序,... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python ContextVar:任务创建后,父任务改值为什么不会传过去 日志中的请求编号从哪里来一个异步服务同时处理几份文档,底层日志函数想知道当前属于哪次请求。逐层传入编号很清楚,但调用链很深时,也可以用 ContextVar 保存随执行上下文传播的少量信息。它的关键问题是:在哪个时点... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python gzip 可重复压缩:内容相同,时间戳和文件名为何仍会改变输出 解压后一样,压缩包却总在变化构建脚本每次生成相同文本,再压缩成 gzip,发布系统却认为产物发生了变化。检查解压内容完全相同,直接比较压缩字节又确实不同。gzip 除了保存压缩数据,还可以在头部记录时间和原始文件名,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python Queue 任务确认:队列已经空了,为什么 join 还可能继续等 从队列取走,不代表已经处理完批处理程序把任务放进队列,由工作线程逐一取走。主线程看到 empty 返回真便宣布完成,却发现输出文件还没生成。原因是队列为空只描述等待领取的项目,不包括已经被领取、仍在执行的任务。完成判... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python 弱值缓存:放进 WeakValueDictionary 的对象为什么会自动消失 缓存不一定负责把对象留住一个解析器希望复用已经生成的文档对象,又不想让缓存长期占住全部文档。把普通字典换成 WeakValueDictionary 后,有些键却很快消失。这并不是缓存随机丢数据,而是弱值字典只帮忙找到... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python memoryview:只读视图为什么仍会跟着底层数据改变 交出去的只读数据,为何后来变了程序从一个可复用缓冲区里切出消息,把只读视图交给后续步骤,以为这份内容已经固定。下一次读取复用了原缓冲区,前一条消息却跟着变化。问题通常出在所有权约定:禁止接收方写入,不代表发送方已经放... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python string.Template:缺失字段该报错,还是把占位符留到下一轮 一个自动生成说明文字的小工具,把文件名和价格放进模板。上线后却出现了未替换的字段,原因是调用 safe_substitute 时少传了参数:这个方法会保留无法替换的占位符。它可以保留待补内容,但后续处理需要明确设计,... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Python shutil.copy2:内容复制成功,权限、时间和所有权是否也跟过去了 文件字节一样,恢复后的行为仍可能不同把脚本复制到另一处以后,内容可以正常打开,执行权限或修改时间却发生变化。备份清单如果只记录“复制成功”,就容易把文件内容与文件属性混在一起。Python 提供几种高层复制函数,它们... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python os.walk 跳过目录:重新赋值为什么无效,切片修改却能阻止向下遍历 不处理文件,不等于没进入目录做项目扫描时,通常希望跳过依赖目录和缓存目录。有些脚本进入这些目录后才判断文件是否需要忽略,结果依旧花时间读取大量目录项;另一些脚本筛选了 dirs,却发现遍历路线完全没变。要真正阻止下降... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读