Python namedtuple 默认值:只给两个备用值,为什么它们落在最后两个字段 用 namedtuple 表示一条任务记录时,defaults=(1, 'queued') 不会依次填到第一个、第二个字段。默认值对应的是最右侧的字段,前面的字段仍需传入。字段顺序一改,默认值的归属也可能跟着变,所以... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python ABC 虚拟子类:isinstance 已经为真,为什么抽象类的方法仍然不存在 为旧组件接入一个新接口时,ABC.register 看起来很方便:登记以后 isinstance 就通过了。然而,调用抽象基类里的便捷方法仍会抛出 AttributeError;甚至完全没有实现必需方法的类,也可以被... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python for 的 else 出口:循环一次也没执行,为什么仍然进入了 else 在候选列表里找第一项可用配置,常见写法是循环内命中就 break,循环后的 else 处理未找到。但把候选列表换成空列表,else 仍会运行;某一项处理抛出异常时,它又不会运行。循环的 else 表达的是一种结束路径... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python 生成器 send 双向传值:还没走到第一个 yield,为什么不能先送入数字 生成器不只能把数据交给调用者。写成 amount = yield total 后,暂停点还可以接收调用者送回来的值。但刚创建对象就执行 send(3),会遇到 TypeError;而已经启动以后,send(3) 返回... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
JavaScript 可调整缓冲区:缩短后视图变成零长,再扩大为什么旧字节没有回来 用可调整ArrayBuffer接收数据时,底层容量一缩短,原来四项的Uint8Array突然报告长度零。随后把容量扩大,它又恢复四项,但原来尾部数据已经变成零。这些现象属于缓冲区大小与视图有效范围变化,不能用普通数组... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
SQLite STRICT 表的 ANY:同样写 ANY,为什么一张表保住 0007,另一张只剩 7 需要保留导入值的原始表示,于是把列声明为 ANY,带前导零的字符串却变成整数。SQLite中的ANY要结合表选项来看:普通表会尝试把看起来像数字的文本转成数值,STRICT表的ANY则保留接收到的值与存储类型。下面在... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash 别名的展开时机:已经换成新定义,旧函数为什么仍然打印旧前缀 脚本先定义别名,再把它写进一个函数,后来改了别名,调用函数却还是旧效果。别名替换发生在命令被读取时;函数定义本身也是一条需要先读取的命令,所以函数体里的相应词可能早已被旧别名展开。下面保存为 demo.sh,用 ba... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Bash extglob 的开启位置:函数第一行已经启用,为什么还没调用就报语法错 把扩展模式放进函数,在函数第一行执行 shopt -s extglob,脚本却还没调用函数就报语法错误。原因是 extglob 也会改变解析器怎样理解括号;解析器必须先读完函数定义,之后才可能执行函数体里的开启命令。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 固定容量堆:heapreplace 总会换入新值,为什么可能把前三名越换越小 数据不断进入,只想保留最大的三个数,可以用小顶堆把当前门槛放在堆顶。但如果每来一条就直接heapreplace,低于门槛的新值也会被放进去,原本应该留下的高值反而出局。容量保持三,并不代表内容仍是前三名。下面先让两个... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python redirect_stdout 的作用范围:已经捕获输出,为什么保存过的流仍写到原处 为了测试一个旧函数的打印内容,外面包上redirect_stdout,仍有几行跑到了原来的位置。常见原因是某段代码提前保存了流对象,后来通过print的file参数直接写它。重定向没有追踪所有输出对象,只在作用期间替... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读