编程学习网 > 编程语言 > Python > 写Python总在重复踩坑?这18个技巧让你的代码干净10倍!
2026
09-28

写Python总在重复踩坑?这18个技巧让你的代码干净10倍!


很多人写Python时会写很多重复代码。他们习惯把功能堆在一个文件里。时间长了,改一处就要检查十处。这不是Python的问题,是习惯的问题。

我见过一个项目,光是一个工具函数就被复制了七次。每次需求变动,开发者要手动同步七个地方。漏掉一个就出bug。这种复制粘贴的做法看起来快,实际在给自己挖坑。

避免重复的办法很简单。把公共逻辑抽出来,放到单独的函数里。如果多个模块都要用,就放到一个独立的py文件里。用import引入。不要觉得多写一个文件麻烦。一个函数只做一件事,改的时候只改一个地方。

函数设计

写函数时,参数不要超过四个。超过四个就考虑用字典或者类来组织。参数太多,调用者记不住顺序,容易传错位置。默认参数不要用可变对象,比如列表或字典。默认值在函数定义时就固定了,多次调用会共享同一个对象。想用列表,默认值写None,函数内部再判断。

性能优化

循环里拼接字符串,用join。不要用加号反复连接。加号会创建很多临时字符串,数据量大时很慢。join一次分配内存,效率高很多。做大量数值计算,用列表推导式代替for循环加append。列表推导式更快,代码也更短。

文件操作

读写文件务必用with语句。手动写open和close,一旦中间抛异常,文件句柄就泄漏了。with会自动关闭,不管有没有出错。处理文本编码,显式指定encoding参数。默认编码在不同系统上不一样,显式写utf-8能躲开很多乱码问题。

数据结构

字典取值,用get方法。不要用中括号。中括号取不存在的键会抛KeyError。get可以给默认值,代码更健壮。字典合并可以用update,也可以把两个字典解包放到花括号里。版本不同支持度不同,看你的运行环境。

用enumerate同时拿索引和值。不要用range加len再索引。enumerate更直接,也不容易出错。同时遍历两个列表,用zip。列表长度不一致时,zip会以短的为准。需要保留所有元素,用itertools.zip_longest,指定填充值。

面向对象

类里面的属性,不要在外部随便改。加一个下划线只是约定,不是强制。想真正限制,用__slots__。它还能省内存,因为不再为每个实例维护一个字典。继承时注意super的用法。多继承要小心,方法解析顺序不是凭直觉能猜对的。

异常处理

异常处理只捕获你知道怎么处理的异常。不要写except Exception然后pass。这会吞掉错误,以后出问题没法查。捕获后要么修复,要么加日志再抛出去。finally用来放清理代码,不管有没有异常都会执行。

模块与依赖

模块导入时不要做耗时操作。导入应该是快的。把初始化逻辑放到函数里,调用时才执行。顶层代码尽量少写,测试和复用都方便。

用虚拟环境隔离依赖。每个项目一个环境。全局安装包容易冲突。requirements.txt记录直接依赖,不要冻结所有间接依赖。升级时手动确认版本变化。

命名与格式

命名要有意义。变量名用名词,函数名用动词。不要用拼音,不要用单个字母除了循环计数器。类名用驼峰,函数和变量用下划线。常量全大写。

代码格式用black统一。不用争论缩进和换行。提交前自动跑一遍。类型注解加上,mypy能帮你发现很多隐藏问题。注解不会影响运行,但能让编辑器更聪明。

调试与日志

调试时用print也行,但学会用logging。不同级别分开输出,线上可以调级别。断言只用于内部检查,不要在断言里写有副作用的代码。Python的-O选项会去掉所有断言。

生成器与装饰器

生成器处理大文件很合适。不要一次读进内存。逐行读,逐行处理。yield把函数变成生成器,每次只产出一个值。内存占用小,代码也清晰。

装饰器用来复用逻辑。比如计时、重试、缓存。写装饰器时用functools.wraps保留原函数的名字和文档。不带参数的装饰器直接写,带参数的要多包一层。

上下文管理器

上下文管理器不只用with打开文件。自己实现__enter__和__exit__,就能管理任何资源。数据库连接、锁、临时目录都能这么用。contextlib里的contextmanager装饰器能用生成器快速写一个。

以上就是“写Python总在重复踩坑?这18个技巧让你的代码干净10倍!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取