Python 常用优雅写法

以下是最常用且能显著提升代码质量的 Pythonic 写法:

一、遍历与循环类

  1. enumerate() 替代 range(len())
    需要同时获取索引和元素时,用 enumerate 更简洁,还可指定起始索引 :
    pythonfor i, item in enumerate(items, start=1):
    print(f"{i}: {item}")
  2. zip() 并行迭代多个序列
    避免手动索引多个列表 :
    pythonfor name, score in zip(names, scores):
    print(name, score)
  3. itertools.product() 扁平化嵌套循环
    遍历多个可迭代对象的笛卡尔积时避免多层嵌套 。

二、推导式与生成器

  1. 列表推导式替代 for 循环

声明式地创建列表,更简洁且往往更快 :

pythonsquares = x**2 for x in range(10) if x % 2 == 0
还有字典推导式 {x: x** 2 for x in range(5)}、集合推导式等 。

  1. 生成器表达式处理大数据

把方括号换成圆括号实现惰性求值,避免一次性生成整个列表、节省内存 :

pythonsum(x2 for x in range(106))

三、赋值与解包

  1. 多重赋值与变量交换

无需临时变量即可交换 :

pythona, b = b, a

  1. 星号解包

捕获序列的首尾和中间部分 :

pythonfirst, *middle, last = 1, 2, 3, 4, 5

四、语法特性

  1. f-string 格式化字符串

Python 3.6+ 引入,直观且支持表达式和高级格式控制 :

pythonprint(f"Pi is ~ {pi:.2f}")

  1. 海象运算符(:=,Python 3.8+)

在表达式内部完成赋值,简化循环和条件判断 :

pythonwhile (line := file.read()):

process(line)

  1. 链式比较与三元表达式

pythonif 18 <= age < 60: ... # 链式比较

result = "big" if x > 10 else "small" # 三元

五、资源与安全访问

  1. with 语句管理资源

文件等资源自动关闭,即使发生异常也能清理 :

pythonwith open('file.txt') as f:

content = f.read()

  1. 字典安全访问

用 get() 或 defaultdict 避免 KeyError :

pythonvalue = my_dict.get("key", "default")

六、其他实用技巧

any() / all():一行替代整个检查循环

字典合并:Python 3.9+ 可用 | 运算符合并字典,也可用 {**d1, **d2}

set 做成员查找:集合查找是 O(1),比列表 O(n) 快

collections.Counter:高效计数

pathlib:跨平台路径处理,如 Path("data") / "file.txt"

join() 拼接字符串:比 + 拼接效率高约 3 倍

函数命名用 snake_case 而非 camelCase,符合 PEP 8 规范

⚠️ 注意事项

可读性第一:如果某个技巧反而让代码难懂,就应选择更明确的写法

注意版本:海象运算符需 Python 3.8+,字典合并 | 需 3.9+,f-string 需 3.6+

Lambda 局限:只适合简单表达式,复杂逻辑应使用 def 定义常规函数

避免可变默认参数:函数默认参数不要用 \[\] 或 {},应设为 None 再在函数内初始化 。

总体而言,这些技巧虽小,但能在日常开发中显著提升代码的可读性、健壮性和性能 。

相关推荐
名字还没想好☜1 小时前
Java 21 switch 模式匹配实战:sealed 接口 + record 替代 if-instanceof 链
java·人工智能·后端·python·spring
深蓝海拓1 小时前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
devilnumber1 小时前
Java 30 组高频技术 / 知识点多角度对比
java·开发语言
何以解忧,唯有..1 小时前
Python 异常处理完全指南:从基础到高级实践
开发语言·前端·python
DLYSB_1 小时前
让 PLC“开口说话”:基于 Modbus TCP 的声光语音告警设计与 Python 调试
python·网络协议·tcp/ip·报警灯
今日热点1 小时前
微信小程序主体变更公证全流程实操解析:场景条件、材料规范、驳回避坑与Python校验脚本实现
python·微信小程序·小程序
O。O蛋黄酥啊1 小时前
GraphRAG 和 LightRAG 详解与对比
人工智能·python·算法·rag·graphrag·lightrag
Buke..1 小时前
【小程序逆向】某游快爆 AI 逆向 sign参数:AI 辅助分析与 MCP 工具链实战
前端·人工智能·爬虫·python·小程序·notepad++
gugucoding1 小时前
57. 【Java】日志框架:SLF4J与Logback
java·开发语言·logback