推荐优先使用f-string(Python 3.6+),因其简洁、高效、可读性强;format()作为兼容性更强的备选,适用于动态格式或模板复用场景。

Python字符串格式化推荐优先使用f-string(Python 3.6+),它更简洁、高效、可读性强;format()作为兼容性更强的备选,适合需要动态格式或复用模板的场景。
f-string:最简最直接的写法
f-string以f或F开头,花括号内直接写变量名或表达式,运行时实时求值。
- 支持任意合法表达式:如f"{x + y:.2f}"、f"{name.upper()} is {age * 12} months old"
- 可嵌入函数调用、属性访问、索引操作,比如f"{user.name.split()[0]}@example.com"
- 调试友好:在变量名后加=可同时显示名称和值,例如f"{x=}, {y=}" → "x=5, y='hello'"
- 注意:花括号内不能有未配对的引号或反斜杠,也不支持反向引用或嵌套f-string
format():灵活可控的通用方案
str.format()通过位置、关键字或混合方式填充占位符,适合格式逻辑较复杂或模板需复用的情况。
- 位置参数:"{} {}".format("Hello", "World") → "Hello World"
- 关键字参数:"{greeting}, {target}!".format(greeting="Hi", target="there")
- 格式说明符统一写在冒号后:"{:.3f}".format(3.14159) → "3.142";"{:04d}".format(7) → "0007"
- 支持嵌套字段名:"{user.name} has {user.score} points".format(user=player)
什么时候不用f-string?
并非所有场景都适合f-string:
立即学习“Python免费学习笔记(深入)”;
- 需要提前定义模板再多次填充(如日志消息模板),用str.format()更清晰
- 格式字符串来自用户输入或配置文件,为避免代码注入风险,必须用format()或%格式化,绝不可拼接进f-string
- 项目需兼容Python format()或旧式%语法
简单对比与建议
同功能下,f-string性能最优,书写最少;format()语义更显式,扩展性更好。日常开发中:
- 单次拼接、变量少、逻辑直白 → 用f-string
- 多处复用同一模板、含条件格式、需延迟绑定 → 用format()
- 避免混用:同一项目内尽量统一风格,减少阅读成本










