
1. 用可变对象做函数默认参数这是Python最经典的陷阱。def add(item, lst[]):你以为每次调用都得到新列表实际上所有调用共享同一个列表。正确做法是用None做默认值函数内部再初始化。这个错误隐蔽性强初学者几乎必中。2. 在循环中修改列表边遍历边删除元素结果往往漏掉一些项。比如for x in lst: if cond: lst.remove(x)索引会错乱。稳妥的方式是遍历副本或者用列表推导式生成新列表。3. 混淆is和is比较身份比较值。小整数和短字符串因缓存可能碰巧相等但大对象或动态生成的值就会翻车。判断相等用判断None用is None。别用is比较数值。4. 忘记异常处理中的资源释放打开文件不关数据库连接不释放时间一长资源耗尽。虽然with语句能解决大部分问题但很多人还是习惯手动open然后忘记close。养成用上下文管理器的习惯省心又安全。5. 滥用全局变量函数里想改外部变量不加global会报错加了又让代码难以追踪。全局变量越多程序状态越混乱测试越困难。尽量把状态封装在类或函数参数里保持数据流清晰。6. 忽视缩进和空格混用Python靠缩进划分代码块Tab和空格混用在不同编辑器下会引发IndentationError。统一用四个空格配置编辑器自动转换。团队协作时这一条尤其重要。7. 用range(len())遍历列表for i in range(len(lst)):虽然能跑但不够Pythonic。直接for item in lst更简洁需要索引时用enumerate。代码可读性提升bug也少。8. 对字典遍历时修改键for k in d: del d[k]会直接报错。想过滤字典用字典推导式或者遍历list(d.keys())。别在迭代过程中改变容器大小这是所有语言的大忌。9. 忽略GIL对多线程的影响Python多线程适合IO密集型任务CPU密集型用多进程。很多人兴冲冲写多线程想加速计算结果发现比单线程还慢就是因为全局解释器锁。选对并发模型事半功倍。10. 不写类型注解和文档字符串小脚本无所谓项目一大没有类型提示和文档接手的人苦不堪言。def process(data: list[dict]) - bool:比光秃秃的函数签名清晰太多。类型注解还能配合mypy提前发现错误。这十个错误你中了几个中了不可怕可怕的是不知道自己在犯错。写代码就像修行每改掉一个坏习惯功力就长一分。