编程学习网 > 编程语言 > Python > 写了5年Python才发现:这20个技巧,让我少写了一半代码
2026
09-29

写了5年Python才发现:这20个技巧,让我少写了一半代码

写Python代码时间长了,有些习惯会慢慢变。一开始只求能跑,后来会想怎么少写几行,怎么让下一个人看懂。下面这些技巧都不是教科书里的标准答案,是踩过坑以后留下的记号。列表推导式用多了会腻。换个思路,用生成器表达式处理大文件。读一个几百万行的日志,sum(1 for line in f if 'error' in line)比先读进列表再循环省内存。内存不是无限大的,尤其跑在容器里的时候。

enumerate带起始值这个参数,很多人没用过。遍历一个列表,想从1开始编号,直接写enumerate(items, 1)。不用再手动i+1。省一步是一步。

字典的get方法可以给默认值。这个都知道。setdefault用在嵌套结构里更顺手。比如统计词频,可以写counts[word] = counts.get(word, 0) + 1。也可以写counts.setdefault(word, []).append(position)来记录每个词出现的位置。后者少一次键查找。

函数参数里的*和/。def f(a, b, *, c)意思是c只能通过关键字传。def f(a, b, /, c)意思是a和b只能按位置传。这些在写库的时候有用,能防止调用者传错。日常脚本里用得少,知道就行。切片可以带步长。s[::2]取偶数位置。s[::-1]反转字符串。反转字符串还有''.join(reversed(s)),效果一样。切片更快,因为是在C层做的。

collections模块里有个Counter。统计元素出现次数,一行搞定。Counter('abracadabra').most_common(2)直接给出出现最多的两个。比手动写字典循环干净。defaultdict和Counter是兄弟。defaultdict(list)在分组的时候省掉判断键是否存在的步骤。groups[category].append(item),不管category之前有没有出现过,都不会报KeyError。

文件路径操作别用字符串拼接。os.path.join或者pathlib.Path。Path('data') / 'file.txt'这种写法在Windows和Linux上都对。Path对象还有.exists()、.read_text()这些方法,比open再read少写几行。

上下文管理器不只是with open。自己写一个类,实现__enter__和__exit__,就能用在with语句里。比如临时切换工作目录,或者给数据库连接加自动提交。contextlib.contextmanager装饰器更简单,把一个生成器函数变成上下文管理器。

装饰器不要只会@wraps。带参数的装饰器需要多一层嵌套。写一个重试装饰器,可以指定重试次数和延迟。用functools.wraps保留原函数的元信息,调试的时候不会一头雾水。

functools.lru_cache可以给函数加缓存。递归算斐波那契,加一行@lru_cache(maxsize=None),速度从指数级降到线性。注意参数必须是可哈希的。列表参数不行,得转成元组。

itertools里藏着不少好东西。chain把多个可迭代对象串起来。groupby按key分组,但必须先排序。islice切片迭代器,不用先转成列表。处理流式数据的时候,这些工具能省内存。异常处理别只写except Exception。捕获具体异常,比如ValueError、KeyError。宽泛的捕获会吞掉真正的问题。else子句在try里没抛异常时执行,finally不管怎样都执行。这三个关键字配合用,逻辑更清楚。

字符串格式化用f-string。f'{name} is {age}'比%和format都直观。f-string里可以写表达式,f'{x + y}'。调试的时候用f'{value=}',直接打印出变量名和值,省掉手写print('value:', value)。

类型注解不是必须的,但加上以后编辑器能帮你查错。def add(a: int, b: int) -> int:。运行时不检查,但mypy这类工具会静态分析。团队协作的时候,注解就是文档。

虚拟环境用venv。python -m venv .venv,然后激活。别把包装在系统Python里。requirements.txt用pip freeze > requirements.txt生成。依赖多了以后,考虑用pip-tools或者poetry管理。

调试用breakpoint()。Python 3.7以后内置了这个函数,调用它会进入pdb。比print大法好,能查看变量、单步执行。记得在提交代码前删掉,或者设个环境变量控制。

写代码的时候,变量名别用拼音。用英文,哪怕拼写不完美。user_list比yonghu_liebiao好读。函数名用动词开头,get_data、parse_config。类名用驼峰。这些规矩看着小,积累起来就是可维护性。

代码格式化用black。不争论风格,统一就好。black .跑一下,所有文件格式一致。配合isort整理import顺序。提交前跑一遍,diff里不会出现无意义的空格改动。

这些技巧不是一天学会的。看别人的代码,改自己的代码,慢慢就记住了。你平时写Python有什么顺手的小技巧?欢迎在评论区说出来,大家一起攒经验。

以上就是“写了5年Python才发现:这20个技巧,让我少写了一半代码”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

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

Python编程学习

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