前阵子给店里弄个小脚本,图省事写了个函数,参数默认塞了个空列表。结果跑起来离谱,头一天统计好好的,第二天数据莫名其妙翻倍。
说真的,我盯着屏幕看了半杯咖啡的功夫才反应过来。Python 里默认参数是在函数定义哪一刻就建好的对象,不是每次调用现造的。那个空列表它记仇呢,你 append 一次它就留着,下次调用接着用,越攒越多。
改法也简单,默认写 None,里头再判空新建。一行的事,但踩之前真想不到。
你们这些老手肯定早知道了,我就当给同样半路出家的人提个醒:别信"默认的空"会真的空。它比甲方还记仇。