Python 格式化输出
简介
在 Python 中,格式化输出是指将变量或表达式按照指定格式嵌入到字符串中进行输出。Python 提供了多种格式化方式,下面介绍最常用的三种。
% 格式化(传统方式)
使用 % 作为占位符,类似于 C 语言的 printf。适用于 Python 2 和 Python 3 早期版本。
语法格式
print("格式化字符串" % (变量1, 变量2, ...))
常用占位符
| 占位符 | 说明 |
|---|---|
%s |
字符串 |
%d |
整数 |
%f |
浮点数 |
%x |
十六进制整数 |
%% |
输出一个百分号 % |
示例
name = "克峰"
age = 18
print("我的名字是 %s,今年 %d 岁。" % (name, age))
# 输出:我的名字是 克峰,今年 18 岁。
特点
- 简单直观,适合初学者。
- 需要明确指定变量类型,否则可能出错。
- 在 Python 3 中仍可使用,但官方更推荐其他方式。
str.format() 方法(Python 2.6+)
使用 {} 作为占位符,通过 format() 方法传入变量。比 % 格式化更灵活。
语法格式
print("格式化字符串".format(变量1, 变量2, ...))
基本用法
- 按顺序填充:
"{} {}".format("Hello", "World") - 指定位置:
"{0} {1}".format("Hello", "World") - 指定名称:
"{name} {age}".format(name="克峰", age=18)
示例
name = "克峰"
country = "中国"
print("我的名字是 {},我的国籍是 {}".format(name, country))
# 输出:我的名字是 克峰,我的国籍是 中国
print("我的名字是 {0},我的国籍是 {1},我又叫 {0}".format(name, country))
# 输出:我的名字是 克峰,我的国籍是 中国,我又叫 克峰
特点
- 不需要指定类型,自动转换。
- 支持位置和关键字参数,可重复引用。
- 功能强大,可进行格式化对齐、数字格式化等。
f-string(Python 3.6+ 推荐)
f-string(格式化字符串字面量)是目前最简洁、高效的格式化方式。在字符串前加 f 或 F,直接在 {} 内写入变量或表达式。
语法格式
print(f"字符串 {变量/表达式}")
示例
name = "克峰"
age = 18
print(f"我的名字是 {name},今年 {age} 岁。")
# 输出:我的名字是 克峰,今年 18 岁。
# 支持表达式
print(f"明年我 {age + 1} 岁。")
# 输出:明年我 19 岁。
特点
- 语法简洁,可读性强。
- 运行速度比前两种方式更快。
- 支持任意表达式,甚至可调用函数。
- Python 3.6 及以上版本可用,已成为主流推荐。
格式化输出对比
| 方式 | 示例 | 优点 | 适用版本 |
|---|---|---|---|
% 格式化 |
"%s %d" % (name, age) |
简单,类 C 语言 | Python 所有版本 |
format() |
"{} {}".format(name, age) |
功能强大,可读性好 | Python 2.6+ |
f-string |
f"{name} {age}" |
最简洁,速度最快 | Python 3.6+ |
高级用法示例
数字格式化(保留两位小数)
pi = 3.1415926
print(f"圆周率近似值:{pi:.2f}") # 输出:3.14
print("圆周率近似值:{:.2f}".format(pi))
print("圆周率近似值:%.2f" % pi)
对齐与填充
# 左对齐(<),右对齐(>),居中(^),可指定宽度和填充字符
print(f"{'左对齐':<10}结束") # 左对齐 10 个宽度
print(f"{'右对齐':>10}结束") # 右对齐
print(f"{'居中':^10}结束") # 居中对齐
print(f"{'填充':*^10}") # 用 * 填充居中
千位分隔符
num = 1234567
print(f"{num:,}") # 输出:1,234,567
注意事项
- 优先使用 f-string(如果 Python 版本 ≥ 3.6),代码更简洁,性能更好。
%格式化在 Python 3 中仍然可用,但不推荐在新代码中使用。format()方法在处理复杂格式(如同时指定多种格式)时仍然有用,但日常简单输出用 f-string 足矣。- 若字符串本身包含
{或},需要重复写才能转义,例如f"{{"输出{。

浙公网安备 33010602011771号