帮人看代码撞上个事儿,一个函数头回调用好好的,第二回就夹带了上次的脏数据。点开一看,默认参数挂了个空list在def那行。
这坑就坑在默认参数只在函数定义时evaluate一次。那个list不是每次调用现造的,是定义时就建好,之后所有调用共用一个对象。你头回append进去的东西,下回调它还在里头躺着。
最迷的是单次跑永远测不出毛病,单独跑一次永远是对。等它进了循环或者被人反复调,状态悄悄累积,这时候才露馅,查起来一头雾水。
正经写法是拿None当哨兵,进函数体再判空初始化,或者传个工厂函数进去。坑不深,但躲在最不起眼的地方,刚摸Python的基本都得踩一回。