Python math.fsum:大数已经抵消,为什么普通累计仍丢掉最后一点残差 五个浮点数包含一对大数、一对正负一,以及一个很小的剩余量。逐步累加得到负一,内置sum得到零,math.fsum却保住了那个小量。同一批输入产生三种结果,关键在于中途丢掉的低位是否仍有地方保存,以及后来大数抵消时能否... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
Python quopri 的 header 开关:同一个下划线,为什么解码后有时变成空格 修复邮件展示问题时,看到标题里的下划线像空格,便给所有quoted-printable内容开启header=True。标题似乎正常了,正文中的文件名却悄悄改变。这个开关说明输入采用哪一种语法,并不是“更完整地解码”;... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
Python mode 的并列规则:票数完全相同,为什么换个输入顺序就换了结果 整理一组错误标签时,蓝色与红色出现次数相同。把输入按另一种顺序读取后,mode突然换了答案,容易让人怀疑计数不稳定。实际上它已经执行了一个确定的并列规则:在频次最高的值中,返回最先遇到的那个。输入顺序因而成为结果的一... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
Python fnmatch 的路径斜杠:只写一个星号,为什么连子目录和点文件都匹配了 给日志清单加筛选条件logs/*.txt,本来只想保留logs目录下可见的文本文件,结果logs/archive/app.txt和logs/.secret.txt都通过了。fnmatch接收的是字符串,斜杠与开头的点... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python address_exclude:从网段扣掉一块,为什么剩下的不能总写成一个 CIDR 整理地址分配清单时,一个大网段中间有一块已经被占用,希望把其余部分交给后续规划。剩余地址数量可以直接相减,但数量本身不能表达哪些位置留下。CIDR同时约束前缀边界和连续范围,扣除结果往往需要多个网段。本文只用文档示例... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 格式选项 z:原数仍是负数,为什么显示出来的负零可以消失 统计页面保留两位小数时,一个很小的负数可能显示成-0.00。直接删掉所有负号会破坏真正的负数,提前判断value == 0也只能处理本来已经等于零的值。格式选项z把处理点放在显示精度完成舍入之后。z从Python 3... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python dataclass 的 compare=False:备注明明不同,为什么两个对象仍然相等 给任务记录增加处理备注后,两份对象的备注一份是queued、一份是finished,放进集合却只剩一个位置。如果备注字段声明了compare=False,这个结果正符合生成的相等规则。读者需要先确定自己比较的是任务身... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python SHAKE 可变长度摘要:连续取两次四字节,为什么拼不成一次八字节 SHAKE允许调用方指定摘要长度,很容易被误用成一个可以连续read的字节流。循环调用digest(4),想分三次取出十二个不同字节,实际却反复得到开头四字节。长度可变,不代表对象内部存在会随着digest调用前进的... yunqueblog/ 技术教程/ 2026-10-02/ 15 阅读
SQLite 授权回调的 IGNORE:列值被隐藏了,为什么带条件的整行也不见了 一个查询工具想保留记录编号,但不返回某个字段,于是在SQLite授权回调里对该字段返回SQLITE_IGNORE。直接SELECT时字段变成空值,看起来符合预期;再加一个字段大于零的条件,整条记录却消失了。这个返回值... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python sqlite3.blobopen:可以定位写字节,为什么写到末尾却不能自动扩容 sqlite3.blobopen返回的对象支持read、write和seek,很容易被当成会自动长大的普通文件。实际使用时,在末尾追加一个字节却得到ValueError,原因是这个句柄只能访问已有BLOB的固定长度。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读