Python yield from 的返回值:子生成器写了 return,为什么 list 里没有这份汇总 批处理生成器逐条yield记录,最后return一份计数与总和。调用者转成list后只看到记录,便以为汇总被丢了。实际上return结束生成器,并把完成值放进结束信号;普通迭代消费的项目和完成时的返回值并不是同一条通... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 数字字符判断:isdigit 已经通过,为什么 int 仍然不接受上标二 数量输入先通过 isdigit,再交给 int,上标二却在第二步报错。原因是“字符属于数字类别”和“整个字符串符合整数语法”回答不同问题。Unicode 还收录了分数、上标以及多种文字系统里的数字,三个常见判断方法的... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite group_concat 的顺序:查询末尾已经排序,拼接内容为何还可能乱 把几个工序拼成一段路径,查询最外层写了 ORDER BY,字符串里的工序却未必按照它排列。最外层排序安排的是已经产生的结果行;要规定 group_concat 逐个接收值的次序,应把 ORDER BY 写在聚合函数最... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite lag 的窗口边界:frame 只剩当前行,为什么仍然能读到上一行 为了让查询只处理当前记录,把窗口框架写成 CURRENT ROW 到 CURRENT ROW,lag 仍然返回上一条内容。这里需要先看函数本身的取行规则:SQLite 的 lag 按分区中的相对位置取值,忽略fram... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
TextDecoder 的 ignoreBOM:设为 true,为什么开头反而多出一个不可见字符 读取带 UTF-8 BOM 的短文本时,开发者把 ignoreBOM 设为 true,期待忽略文件开头的标记,字符串却多了一个 U+FEFF。这个名字容易被理解反了:true 会忽略BOM的特殊处理,使对应字符进入结... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 解构默认值:已经写了备用值,为什么 null 仍然原样留下 读取任务选项时,给 retries 写了默认值三,接口传来 null 后却依旧得到 null。这里的默认初始化只在取到 undefined 时执行;它没有检查值是否适合业务,也不会把所有看起来“空”的输入换成三。下面... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 三种余数:同样是七除以四,remainder 为什么会给出负一 周期位置、相位差和循环索引都可能需要余数,但 Python 的百分号、math.fmod 和 math.remainder 并不承诺同一个结果。七除以四,前两者可以得到三,remainder 却得到负一;差异首先来自... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python except as 的名称清理:异常处理结束,为什么原来同名的变量也不见了 脚本先给 error 赋了一个默认说明,随后又写 except ValueError as error。异常在处理块里打印正常,离开后再次访问却抛出 UnboundLocalError。这里不是异常还没被捕获,而是处... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python match 的裸名称:常量已经定义,为什么 case 仍把任意输入都接住 把状态路由从 if 改成 match 时,程序员常把 READY = "ready" 放在函数里,然后写 case READY。看起来是在引用已有常量,实际却会把收到的值绑定给 READY。就算输入是 "broken... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python super 的查找顺序:明明写在左边父类里,为什么下一步会进入兄弟类 维护两个组合功能的父类时,常见写法是在各自的方法里调用 super。单独测试 Left,下一步进入 Root;把 Left 和 Right 组合成 Joint 后,同一行代码却先进入 Right。如果把 super ... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读