pythonprint用法format_使用f-string与str.format格式化输出实例

2次阅读

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

pythonprint用法format_使用f-string与str.format格式化输出实例

python print 里怎么用 f-string 替代 % 或 format

f-string 是 Python 3.6+ 最推荐的字符串格式化方式,写法简洁、性能高、支持表达式求值。直接在字符串前加 fF,花括号内写变量或表达式即可。

  • 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)不是必须的,省略时会自动推断,但显式写出更安全,尤其混用数字和字符串时

实际写代码时,优先用 f-string;需要动态构造格式字符串(比如从配置读取模板)才用 str.format();旧项目维护中遇到 % 就逐步替换。最常被忽略的是 f-string 中无法嵌套花括号(除非双写 {{ 表示字面量 {),这点容易调试半天才发现少了个括号。

text=ZqhQzanResources