Python怎么用f-string格式化打印变量内容

认真发呆
认真发呆
发布时间:2026-11-05| 8人浏览过
原创

详细讲解Python中如何使用f-string(格式化字符串字面值)高效、清晰地打印变量内容。涵盖基础变量嵌入、内联表达式求值、浮点精度与千分位控制、对齐填充、日期时间格式化以及Python 3.8+自调试语法等实用技能。

Python怎么用f-string格式化打印变量内容

在 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} 次。")
终端输出结果
用户 [林夏] 的角色为 数据工程师,累计登录次数:142 次。

在上述代码中,f"..." 内部的 {user_name}、{user_role} 和 {login_count} 会在运行时直接从当前变量作用域中取值,无需像传统的 format() 那样将变量名放置在字符串结尾的参数列表中,有效避免了长文本中占位符与变量位置错位对应的问题。

Python怎么用f-string格式化打印变量内容
图 1:f-string 生命周期中的 5 个核心步骤:词法识别、花括号解析、运行时求值、格式转换与拼接输出

二、在花括号中执行表达式与方法调用

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 '售罄'}")
终端输出结果
矩形宽度: 15m, 高度: 24m, 面积: 360m²
课程标准名称: Python Programming (字符总长度: 18)
商品: 机械键盘, 状态: 有货
关键细节:花括号内字典键的引号嵌套规则
在花括号内部通过字典键访问内容时(如 product['name']),内部键的引号必须与外层 f-string 的边界引号区分开。如果 f-string 使用了外层双引号 f"...",则内部键名必须使用单引号 'name';反之亦然。在 Python 3.12 之前,若引号相同会导致语法解析报错。

三、利用格式说明符控制输出样式

在变量打印过程中,经常需要限定浮点数小数位数、对齐列宽、添加千位分隔符或转换为百分比。f-string 支持通过冒号 : 后接格式说明符(Format Specifier)来实现这些控制,其基本语法为 {变量:格式规则}。

Python怎么用f-string格式化打印变量内容
图 2:f-string 格式说明符语法结构与对齐、精度、千分位及类型代码规则

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.14
圆周率保留四位: 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
年营收 (下划线分隔): 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}")
终端输出结果
完成率 (保留一位百分比): 87.4%
十进制 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}")
终端输出结果
当前任务生成时间: 2026-11-04 14:30:15
简写日期: 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=10, beta=25, total=35
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}")
终端输出结果
默认打印: Hello World

使用 repr 打印: 'Hello\tWorld\n'

五、f-string 与其他格式化方式的深度对比

为了理解为什么 f-string 成为现代 Python 的标配,需要将其与过去的 % 操作符和 str.format() 方法进行对比:

Python怎么用f-string格式化打印变量内容
图 3:三种字符串格式化方式在可读性、执行耗时与语言集成度上的横向对比
特性指标 % 占位符 (%-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格式化打印变量内容
图 4:f-string 六大高频应用场景速查图解

总结而言,在 Python 中使用 f-string 格式化打印变量内容的最佳实践可以归纳为:

  1. 声明前缀:牢记在引号前添加 f 或 F;
  2. 嵌入变量:用 {var} 直接嵌入变量或轻量运算;
  3. 格式控制:通过 {var:规则} 灵活约束浮点数精度、千分位、对齐与日期;
  4. 开发排查:善用 Python 3.8+ 的 {var=} 快速输出变量名与当前状态。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。