f-string 是 Python 3.6+ 最推荐的字符串格式化方式,写法简洁、性能高、支持表达式求值与方法调用,但定义时即求值,不适用于需延迟渲染的模板场景。

python print 里怎么用 f-string 替代 % 或 format
f-string 是 Python 3.6+ 最推荐的字符串格式化方式,写法简洁、性能高、支持表达式求值。直接在字符串前加 f 或 F,花括号内写变量或表达式即可。
-
f"Hello {name}"—— 变量名直接插入,不需引号 -
f"{x + y:.2f}"—— 花括号里能写任意合法表达式,还能带格式说明符 -
f"{obj.name.upper()}"—— 支持方法调用,但不能有赋值语句(如{x = 1}是语法错误) - 注意:f-string 在定义时就求值,不是延迟渲染,所以不能用于模板场景(比如日志格式化器里想留到运行时再填值)
str.format() 常见写错的参数位置和占位符类型
str.format() 灵活但容易因参数顺序或占位符写法出错。核心是区分位置参数、关键字参数和混合用法。
-
"{} {}".format(a, b)—— 按顺序填入,第一个{}对应a -
"{1} {0}".format(a, b)—— 显式指定索引,{1}取第二个参数(索引从 0 开始) -
"{name}: {age}".format(name="Alice", age=30)—— 关键字参数,名字必须匹配 - 常见报错:
IndexError: tuple index out of range是因为占位符数多于传入参数;KeyError是关键字名没传或拼错
print 输出时 format 和 f-string 性能差异明显吗
在绝大多数日常使用中感知不到差异,但高频日志或循环内大量拼接时,f-string 明显更快——它本质是编译期优化,而 str.format() 是运行时解析字符串模板。
- 简单测试:10 万次拼接
f"{x}-{y}"比"{}-{}".format(x, y)快约 30%~40% -
%格式化(如"%s-%d" % (s, n))已不推荐,Python 3.12 起文档明确标记为 legacy,且不支持命名参数等现代特性 - 真正影响性能的往往不是格式化本身,而是
print()的 I/O 开销;如果要极致优化,考虑批量写入或禁用 flush
format 字符串里的冒号后面能写什么
冒号 : 后是格式说明符(format specifier),控制对齐、宽度、精度、进制等。它同时被 f-string 和 str.format() 支持,语法一致。
立即学习“Python免费学习笔记(深入)”;
-
f"{x:05d}"→ 补零到 5 位整数;"{:.3f}".format(3.14159)→ 保留三位小数 f"{text: → 左对齐占 10 字符宽;f"{text:^12}"→ 居中-
f"{num:x}"→ 十六进制小写;f"{num:,}"→ 千分位逗号分隔 - 注意:类型码(如
d,f,s)不是必须的,省略时会自动推断,但显式写出更安全,尤其混用数字和字符串时
str.format();旧项目维护中遇到 % 就逐步替换。最常被忽略的是 f-string 中无法嵌套花括号(除非双写 {{ 表示字面量 {),这点容易调试半天才发现少了个括号。











