Python shlex 拆分带引号文本:得到词元之后,还没有执行任何命令 一个小工具接受类似“动作加参数”的文本,名称里允许空格,也允许用引号表示空字符串。直接按空白 split 会把一个名称切成两段;自己反复替换引号,又容易破坏转义和错误提示。shlex 可以处理这种接近 Unix sh... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python struct 解析二进制:先固定字节序,再校验报文长度 同一组二进制数据在自己电脑上能够往返解析,并不能证明别的程序也会读出相同结果。二进制协议需要先约定字段顺序、宽度、符号和字节序。struct 的默认模式会采用本机布局,可能包含对齐填充,因此不适合靠“本地试过”来定义... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python timedelta 时长换算:seconds 只是余数,总秒数要保住天数与符号 统计任务运行时长时,半小时的样本一切正常,超过一天的任务却突然变短,原因可能只是读错了属性。timedelta 的 seconds 表示归一化后不足一天的秒数分量,并不是整个时间差所包含的秒数。代码能执行,结果也像一... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 参数转发:"$@" 保留的边界,为什么 "$*" 会合成一个参数 包装脚本最容易丢掉的是参数边界给常用命令包一层脚本时,常见需求是先做一点准备,再把用户提供的参数交给真正的程序。参数里一旦出现空格、空字符串或星号,肉眼看上去一样的一串文本,传过去却可能已经变成不同数量的参数。问题发... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite AUTOINCREMENT:自动生成编号,和保证不复用旧编号有什么区别 没写自增关键字,编号也会增加给 SQLite 表声明 INTEGER PRIMARY KEY 后,插入时省略这一列,数据库通常就会自动分配整数。于是有人认为 AUTOINCREMENT 只是更明确的写法,也有人把它理... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python ChainMap 配置覆盖:读取会向下查,写入为什么只落在第一层 配置合并后,还能看清优先级吗一个脚本同时读取默认值、项目配置和本次运行参数。每次都把三个字典合并成新字典当然可行,但如果还需要临时覆盖、撤销覆盖,或者观察默认值的更新,反复复制容易让代码里散落多套优先级。ChainM... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python functools.wraps:装饰之后,函数名字和签名为什么仍值得保留 功能正常,工具却认错了函数给数据处理函数套上一层计数装饰器以后,返回值没有变化,帮助信息里却只剩下包装函数的名字,自动生成的参数说明也成了一对星号参数。这个问题不一定会让业务立刻失败,却会使日志定位、接口文档和调试工... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python monotonic 超时预算:多次重试怎样共享同一个截止时刻 一个操作允许最多等待五秒,内部却重试三次,每次都重新给五秒,最终耗时自然可能超过预期。问题不在计时精度,而在预算被反复重置。应在操作开始时确定一次截止时刻,之后每个阶段只领取尚未用完的时间。计算经过多久通常使用 ti... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python random.Random 隔离状态:同一个种子,为什么调试一次结果就变了 测试数据固定了随机种子,结果却在加一行调试代码后变化,常见原因是多个功能共用同一个随机状态。每次抽样都会推进状态,调试代码多取一次,后面的业务就从下一个位置开始。固定种子只固定起点,不会固定所有调用者各自拿到哪几个值... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript Object.entries 顺序:数字形状的键为什么跑到了前面 后端返回一组编号,前端按接收顺序写进对象,再用 Object.entries 渲染列表,结果编号十忽然排到了编号二后面。对象属性确实有枚举规则,但这个规则不是所有键统一按写入顺序排列。用对象同时承担快速查找与业务排序... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读