Python怎么用f-string格式化打印变量内容
详细讲解Python中如何使用f-string(格式化字符串字面值)高效、清晰地打印变量内容。涵盖基础变量嵌入、内联表达式求值、浮点精度与千分位控制、对齐填充、日期时间格式化以及Python 3.8+自调试语法等实用技能。
在 Python 中,使用 f-string(格式化字符串字面值)格式化打印变量内容,只需在字符串引导引号前添加前缀 f 或 F,并在字符串内部通过花括号 {变量名} 直接嵌入变量,随后交给 print() 输出即可。例如:name = "张三"; print(f"你好,{name}")。这种语法自 Python 3.6 起引入,替代了早期的 % 格式化和 str.format() 方法,具备直观可读、执行效率高且支持内联表达式求值的显著优势。
一、f-string 的基础语法与变量打印
f-string 的全称是 Formatted String Literals。在未添加 f 前缀时,字符串内部的花括号仅被视作普通文本字符;一旦加上 f 前缀,Python 解释器在编译阶段就会将其解析为带求值指令的格式化结构,并在程序运行到该代码行时,动态提取变量的值并转换为字符串。
# 基础变量定义与 f-string 打印
user_name = "林夏"
user_role = "数据工程师"
login_count = 142
# 使用 f-string 拼接变量并打印
print(f"用户 [{user_name}] 的角色为 {user_role},累计登录次数:{login_count} 次。")
在上述代码中,f"..." 内部的 {user_name}、{user_role} 和 {login_count} 会在运行时直接从当前变量作用域中取值,无需像传统的 format() 那样将变量名放置在字符串结尾的参数列表中,有效避免了长文本中占位符与变量位置错位对应的问题。
二、在花括号中执行表达式与方法调用
f-string 的强大之处在于,花括号内不仅可以放置简单的变量名,还可以直接编写合法的 Python 表达式,包括四则算术运算、字符串方法、数学函数调用乃至字典取值和列表切片。Python 会先对花括号中的表达式完成计算,再将计算结果嵌入字符串中。
# 1. 算术运算
width = 15
height = 24
print(f"矩形宽度: {width}m, 高度: {height}m, 面积: {width * height}m²")
# 2. 字符串方法与内置函数调用
course = "python programming"
print(f"课程标准名称: {course.title()} (字符总长度: {len(course)})")
# 3. 字典键值读取与三元条件判断
product = {"name": "机械键盘", "stock": 8, "unit_price": 299}
print(f"商品: {product['name']}, 状态: {'有货' if product['stock'] > 0 else '售罄'}")
课程标准名称: Python Programming (字符总长度: 18)
商品: 机械键盘, 状态: 有货
product['name']),内部键的引号必须与外层 f-string 的边界引号区分开。如果 f-string 使用了外层双引号 f"...",则内部键名必须使用单引号 'name';反之亦然。在 Python 3.12 之前,若引号相同会导致语法解析报错。
三、利用格式说明符控制输出样式
在变量打印过程中,经常需要限定浮点数小数位数、对齐列宽、添加千位分隔符或转换为百分比。f-string 支持通过冒号 : 后接格式说明符(Format Specifier)来实现这些控制,其基本语法为 {变量:格式规则}。
1. 控制浮点数小数位数(精度截断与舍入)
使用 .Nf 规格可以指定保留 N 位小数。Python 会根据 IEEE 754 浮点标准对多余小数位进行就近舍入。
pi = 3.1415926535
score = 89.6
print(f"圆周率保留两位: {pi:.2f}")
print(f"圆周率保留四位: {pi:.4f}")
print(f"补齐两位小数: {score:.2f}")
圆周率保留四位: 3.1416
补齐两位小数: 89.60
2. 数字千分位分隔符
在财务金额或大数据统计场景中,连续的长数字不易辨识。通过在冒号后使用逗号 , 或下划线 _,可以自动按千位添加分隔符:
annual_revenue = 184509200
unit_balance = 32500.8
print(f"年营收 (逗号千分位): {annual_revenue:,}")
print(f"年营收 (下划线分隔): {annual_revenue:_}")
print(f"账户余额 (千分位加两位小数): ¥{unit_balance:,.2f}")
年营收 (下划线分隔): 184_509_200
账户余额 (千分位加两位小数): ¥32,500.80
3. 文本对齐与填充字符
在控制台输出规整的表格或状态清单时,可以通过 <(左对齐)、>(右对齐)和 ^(居中对齐)配合指定宽度,甚至指定非空格填充字符:
items = [("CPU", 98.5), ("Memory", 12.0), ("Disk", 4.35)]
print(f"{'组件':<10} | {'利用率':>8}")
print("-" * 22)
for name, usage in items:
print(f"{name:<10} | {usage:>7.2f}%")
# 使用指定字符填充
print(f"{'系统就绪':*^20}")
----------------------
CPU | 98.50%
Memory | 12.00%
Disk | 4.35%
********系统就绪********
4. 百分比与进制转换
使用类型代码 % 可将小数乘以 100 并自动附带百分号;使用 b、o、x 可将整数分别格式化为二进制、八进制和十六进制输出:
completion_rate = 0.87425
num = 42
print(f"完成率 (保留一位百分比): {completion_rate:.1%}")
print(f"十进制 {num} 转二进制 (补足8位): {num:08b}")
print(f"十进制 {num} 转十六进制 (带前缀): {num:#x}")
十进制 42 转二进制 (补足8位): 00101010
十进制 42 转十六进制 (带前缀): 0x2a
5. 日期与时间对象格式化
当打印 datetime 或 date 对象时,f-string 允许在花括号内直接使用 strftime 的格式指令,无需显式调用 .strftime():
from datetime import datetime
current_time = datetime(2026, 11, 4, 14, 30, 15)
print(f"当前任务生成时间: {current_time:%Y-%m-%d %H:%M:%S}")
print(f"简写日期: {current_time:%y/%m/%d}")
简写日期: 26/11/04
四、Python 3.8+ 便捷调试语法与类型转换符
在日常排查代码和日志输出时,开发者往往既想打印变量名,又想打印其具体数值。传统的写法是 print(f"x = {x}, y = {y}")。从 Python 3.8 开始,f-string 提供了简洁的 {var=} 调试语法。
alpha = 10
beta = 25
total = alpha + beta
# 使用等号后缀自动打印表达式本身与计算值
print(f"{alpha=}, {beta=}, {total=}")
print(f"{alpha * 2 + beta = }")
alpha * 2 + beta = 45
此外,f-string 支持三种显式转换标志(放在表达式与冒号之间):
!s:强制调用str(var)转换为可读字符串(默认行为)。!r:强制调用repr(var)转换为原始调试表示(常用于打印字符串时带上原引号以查验空格或隐式字符)。!a:强制调用ascii(var)将非 ASCII 字符转换为转义编码。
raw_text = "Hello World
"
print(f"默认打印: {raw_text}")
print(f"使用 repr 打印: {raw_text!r}")
使用 repr 打印: 'Hello\tWorld\n'
五、f-string 与其他格式化方式的深度对比
为了理解为什么 f-string 成为现代 Python 的标配,需要将其与过去的 % 操作符和 str.format() 方法进行对比:
| 特性指标 | % 占位符 (%-formatting) | str.format() 方法 | f-string (推荐) |
|---|---|---|---|
| 引入版本 | Python 2 初始阶段 | Python 2.6 / 3.0 | Python 3.6+ |
| 代码可读性 | 较差,长语句中占位符与后置元组脱节 | 一般,变量多时 format 参数冗长 | 极高,变量就地展开,阅读无阻碍 |
| 内联表达式求值 | 不支持 | 不支持 | 原生支持任意合法 Python 表达式 |
| 底层执行机制 | C 级字符串扫描转换 | 方法调用与元组/字典参数打包 | 专用字节码指令优化(FORMAT_VALUE) |
| 运行性能 | 基准耗时的约 1.4 倍 | 基准耗时的约 2.1 倍(相对较慢) | 最快(基准 1.0x) |
六、常见易错点与避坑指南
初学者在使用 f-string 时,容易在以下几个细节上踩坑:
- 输出字面花括号:如果输出的字符串本身需要包含
{或}(例如输出 JSON 字符串或数学集合),必须使用双花括号进行转义。即{{输出{,}}输出}。例如:f"集合内容: {{{'apple', 'banana'}}}"。 - 反斜杠转义限制:在 Python 3.12 之前,f-string 的
{}表达式内部严禁直接出现反斜杠\(例如写f"{'\n'.join(items)}"会直接抛出SyntaxError)。若在低于 3.12 的版本运行,需先将换行符赋值给独立变量再嵌入。 - 不要漏掉前缀 f:如果遗漏了前缀字母
f,代码不会报错,但"{var}"会被完全作为原样文本打印输出,初学者经常因排查不出变量为何未替换而困惑。 - 避免在花括号内执行耗时运算:虽然花括号支持函数调用,但 f-string 每次执行都会重新运行其中的表达式。如果在高频循环中执行复杂的数据库查询或深层递归函数,会导致严重的性能退化,应先在外部完成计算后再格式化。
七、f-string 核心用法速查全景与总结
掌握 f-string 的核心在于熟练掌握其在不同场景下的格式说明符。下面将前文介绍的各类典型模式集中汇总,便于在日常编码中快速查阅:
总结而言,在 Python 中使用 f-string 格式化打印变量内容的最佳实践可以归纳为:
- 声明前缀:牢记在引号前添加
f或F; - 嵌入变量:用
{var}直接嵌入变量或轻量运算; - 格式控制:通过
{var:规则}灵活约束浮点数精度、千分位、对齐与日期; - 开发排查:善用 Python 3.8+ 的
{var=}快速输出变量名与当前状态。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













