reverse怎么用:写代码时连续搞错好几次

reverse怎么用:写代码时连续搞错好几次

当初刚上手写简单脚本,对着reverse怎么用这个问题卡了快一个晚上,敲一行报错一行,屏幕上红色提示跳来跳去,越改心里越乱。一开始以为就是一个一键翻转内容的函数,随便套进去就能把列表倒过来,完全没料到会分出两种不一样的写法,当时根本分不清哪个会改动原始数据,哪个只是返回新结果。

最开始写的那段代码,直接拿列表调用reverse,然后把返回值赋值给新变量。运行之后拿到手的变量是空的,反复刷新几次,结果全都一样。盯着代码看了很久,怀疑是拼写出错,来回检查字母,确认reverse没有打错,甚至去复制网上的示例,粘贴过来还是这个问题。那会脑子转不过来,以为调用之后一定会生成新内容,不知道这个操作是直接在原来的列表上面修改,执行完之后本身没有返回可用内容。

折腾半天,试着分开两行写。先定义好原始列表,单独执行reverse操作,再打印原来的列表。这下才看见,原本顺序已经彻底颠倒。可这个方式也带来麻烦,后面别的地方还要用到原始顺序的数据,原始列表被直接改掉,后面读取的时候全部是翻转后的内容,一连串逻辑跟着出错。项目里别的小段代码全都跟着崩,排查的时候花了很久才定位到是这里改动了原数据。

身边一起学代码的朋友,那时候刚好在写同样的功能。他没有直接用reverse,而是用切片的方式生成了一个全新翻转后的副本。原始列表保留原样,新变量存翻转后的内容,不会破坏原本的数据。看他跑通的时候,一下子就明白两种方式的差别。不是哪一个更好,只是适用场景完全不一样,我之前没考虑后续还要复用原始数据,才踩了这个麻烦。

只是临时翻转,不再需要原来顺序的时候,用reverse直接改原列表,写法简单,也不会额外占用内存。但如果原始数据后面还有别的用途,就不能直接调用它,不然原始数据直接被覆盖,很难恢复。

那天晚上来回切换两种写法测试,一会覆盖原数据,一会拿到空返回,反复跑程序看输出。一会打印原列表,一会打印接收返回值的变量,对比两边输出的差异,慢慢把这个行为记下来。中间还试过把reverse放进循环里面,每一轮循环都翻转一次,结果列表来回颠倒,输出一会正一会反,更难调试。

写的时候总容易忽略这种隐性修改,函数看起来简简单单,背后却会改动你已经定义好的变量。之前习惯了大部分函数都会返回处理好的新值,碰到reverse这种原地修改的,思维一下子转不过来。

后来写别的小脚本,需要颠倒序列的时候,会先停下来想一想,原始列表后面还要不要继续使用。如果还要保留,就不用reverse。只有确定原始数据用完了,不会再读取,才会选择直接调用它。

那次之后写代码,遇到类似原地修改的方法,都会下意识多留个心眼。只是那次卡在reverse怎么用上面,反复踩坑的感觉,到现在还有印象。