python必背源代码f-string格式化字符串代码

Finn
Finn
发布时间:2026-11-12| 8人浏览过
原创

系统整理Python开发中高频使用的f-string格式化字符串源代码,涵盖变量内插、浮点数精度与千位分隔、对齐补零、日期时间格式化、字典读取、等号自记录调试及常见引号与大括号转义写法。

在 Python 3.6 及更高版本中,f-string(格式化字符串字面值,Formatted String Literals)是拼接变量与控制输出格式的标准写法。只需在字符串引号前加上小写字母 f 或大写字母 F,即可在花括号 {} 内直接写入变量、运算表达式以及格式说明符。本文汇总日常开发中最常复用的 f-string 源代码模板,涵盖变量嵌入、数值精度控制、对齐补位、日期与字典取值、自记录调试表达式以及特殊字符转义,所有代码均可在 Python 3.8 及以上环境的终端或脚本中直接运行。

从字符串拼接痛点看 f-string 的工作机制

初学 Python 时,最容易写出的字符串拼接代码往往是使用加号 +。只要拼接对象里混入了一个整数或浮点数,解释器就会立即抛出 TypeError: can only concatenate str (not "int") to str,迫使开发者在每个非字符串变量外层套上 str()。而早期用于替代加号的 % 运算符和 str.format() 方法,虽然解决了类型转换问题,却把“占位符位置”和“传入的变量名”拆成了首尾两段:一旦一行字符串里有五六个变量,阅读代码时就不得不来回核对序号与参数顺序。

f-string 的设计直接消除了这种割裂。它并不是一个普通的字符串常量,而是在运行时求值的表达式。Python 解析到带有 f 前缀的字符串时,会自动提取花括号内部的表达式,在当前作用域求值后,调用对象的 __format__() 方法将其转换为指定格式的字符串,最后与前后的静态文本拼接成完整结果。

python必背源代码f-string格式化字符串代码
图 1:f-string 语法组成部分及冒号后格式说明符的标准解析次序

基础必背代码:变量内插、算术运算与方法调用

在最常见的日志输出与提示信息生成场景中,只需将变量名直接放入 {} 即可完成替换。除了单纯的变量名,花括号内还支持直接编写算术表达式、调用字符串方法或使用三元条件表达式,无需在拼接前额外声明临时变量。

# 适用环境:Python 3.6+
item_name = "无线机械键盘"
unit_price = 299.5
quantity = 3
is_vip = True

# 1. 直接嵌入变量
line_basic = f"商品名称:{item_name},购买数量:{quantity} 件"

# 2. 花括号内直接进行算术运算与三元条件判断
discount = 0.9 if is_vip else 1.0
line_calc = f"折后总价:{unit_price * quantity * discount} 元(状态:{'VIP会员' if is_vip else '普通用户'})"

# 3. 花括号内直接调用对象方法
raw_code = "  kb-pro-2026  "
line_method = f"标准商品编码:{raw_code.strip().upper()}"

print(line_basic)
print(line_calc)
print(line_method)
示例输出商品名称:无线机械键盘,购买数量:3 件 折后总价:808.65 元(状态:VIP会员) 标准商品编码:KB-PRO-2026

虽然花括号支持放入任意合法的 Python 表达式,但在实际编写代码时应当控制表达式的长度。如果一个花括号内嵌套了多层列表推导式或复杂的函数调用链,代码的可读性会迅速下降,此时先把计算结果赋给一个语义清晰的局部变量,再放入 f-string 中会更加稳妥。

数值格式化必背代码:保留小数、千位分隔、百分比与进制

处理财务报表、统计指标或底层二进制数据时,直接打印浮点数常会遇到 808.6500000000001 这类二进制浮点精度尾差,或者需要将小数转换为直观的百分比。此时需要在表达式右侧加上英文冒号 :,紧跟格式说明符。

# 适用环境:Python 3.6+
revenue = 1284560.789
growth_rate = 0.1856
packet_header = 255

# 1. 保留指定位数小数(:.2f 表示保留 2 位小数,自动四舍六入五成双)
print(f"保留两位小数:{revenue:.2f}")

# 2. 千位分隔符结合保留两位小数(:,.2f 常用于金额展示)
print(f"标准金额格式:¥{revenue:,.2f}")

# 3. 显式输出正负号(:+.2f 在正数前强制加上 + 号,适合涨跌幅)
print(f"营收环比变动:{revenue - 1200000:+,.2f}")

# 4. 百分比格式化(:.1% 自动乘以 100 并附上 % 符号,保留 1 位小数)
print(f"同比增长率:{growth_rate:.1%}")

# 5. 科学计数法与整数进制转换(b 二进制, o 八进制, x 十六进制小写, #x 带 0x 前缀)
print(f"科学计数法:{revenue:.3e}")
print(f"十进制 {packet_header} -> 十六进制:{packet_header:#x},八位二进制:{packet_header:08b}")
示例输出保留两位小数:1284560.79 标准金额格式:¥1,284,560.79 营收环比变动:+84,560.79 同比增长率:18.6% 科学计数法:1.285e+06 十进制 255 -> 十六进制:0xff,八位二进制:11111111
易错提醒:组合使用千位分隔符与小数精度时,逗号 , 必须写在小数点 . 之前(即 :,.2f)。如果颠倒写成 :.2,f,Python 会直接抛出 ValueError: Invalid format specifier。另外,:.2f 的舍入规则遵循与内置 round() 相同的“四舍六入五成双”(银行家舍入法),若业务要求严格逢五进一,应配合标准库 decimal.Decimal 使用。
python必背源代码f-string格式化字符串代码
图 2:常用数值与文本格式说明符的写法与输出对照

文本对齐、宽度补零与字符串截断代码

在命令行终端打印纯文本表格、生成固定长度的订单流水号(如 000128)或制作日志分隔标题时,使用 f-string 的对齐符号(< 左对齐、> 右对齐、^ 居中对齐)比手动调用 ljust()、rjust() 和 zfill() 更加紧凑。

# 适用环境:Python 3.6+
order_seq = 128
section_title = "数据校验报告"
long_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

# 1. 编号左侧补零(:06d 表示总宽 6 位,不足位在左侧补 0)
order_id = f"ORD-2026-{order_seq:06d}"
print(f"流水号生成:{order_id}")

# 2. 居中对齐并用指定字符填充(:=^24 表示总宽 24 字符,居中,两侧填 =)
print(f"{section_title:=^24}")

# 3. 终端多列对齐排版(< 左对齐,> 右对齐)
records = [
    ("server-alpha", 42.5, "RUNNING"),
    ("db-master-01", 88.05, "WARN"),
    ("cache-node", 9.1, "RUNNING"),
]
print(f"{'主机名称':<14} | {'CPU使用率':>8} | {'状态':^8}")
print("-" * 38)
for host, cpu, status in records:
    print(f"{host:<14} | {cpu:>8.2f}% | {status:^8}")

# 4. 字符串定长截断(:.10 表示字符串最多只保留前 10 个字符)
print(f"脱敏Token前缀:{long_token:.10}...")
示例输出流水号生成:ORD-2026-000128 =========数据校验报告========= 主机名称 | CPU使用率 | 状态 -------------------------------------- server-alpha | 42.50% | RUNNING db-master-01 | 88.05% | WARN cache-node | 9.10% | RUNNING 脱敏Token前缀:eyJhbGciOi...

这里有一个对字符串和浮点数截然不同的细节:小数点加数字(例如 .10)用于浮点数时代表“小数点后保留几位”,而用于字符串变量时则代表“最大截取字符长度”。同时搭配宽度与截断(如 f"{long_token:<12.8}")即可实现“先截取前 8 个字符,再按总宽 12 左对齐补空格”。

日期时间、字典读取与嵌套动态精度代码

除了基础数据类型,Python 标准库中的 datetime 对象也实现了自定义的 __format__() 协议。这意味着在 f-string 的冒号后面可以直接写 %Y-%m-%d %H:%M:%S,省去显式调用 .strftime() 的步骤。此外,格式说明符本身还支持再嵌套一层 {},用于从变量中动态读取保留的小数位数或列宽。

# 适用环境:Python 3.6+
from datetime import datetime

# 1. 日期时间直接格式化(无需调用 strftime)
current_time = datetime(2026, 11, 11, 14, 35, 9)
print(f"日志时间戳:{current_time:%Y-%m-%d %H:%M:%S}")
print(f"紧凑日期码:{current_time:%Y%m%d}")

# 2. 在 f-string 中读取字典键值(注意内外层引号必须区分)
user_profile = {"username": "lin_dev", "role": "admin", "quota_gb": 50}
print(f"当前登录账号:{user_profile['username']}(角色:{user_profile['role']})")

# 3. 嵌套花括号:动态指定宽度与小数精度
pi_val = 3.1415926535
col_width = 12
decimal_places = 4
print(f"动态精度输出:[{pi_val:>{col_width}.{decimal_places}f}]")
示例输出日志时间戳:2026-11-11 14:35:09 紧凑日期码:20261111 当前登录账号:lin_dev(角色:admin) 动态精度输出:[ 3.1416]
引号冲突提醒:在 Python 3.11 及更早版本中,花括号内部使用的引号不能与 f-string 外层引号相同。例如外层使用了双引号 f"...",字典取值就必须写成单引号 user_profile['username'];若写成 f"{user_profile["username"]}",在 Python 3.11 下会直接报 SyntaxError(Python 3.12 起放宽了这一限制,但为了跨版本兼容,养成“外双内单”的习惯最为安全)。

调试与排错必背代码:自记录表达式、大括号转义与转换标志

排查代码逻辑时,开发者经常需要写 print(f"batch_size = {batch_size}") 来查看变量名称与对应的值,同一个变量名要敲两遍。从 Python 3.8 开始,f-string 引入了等号 = 自记录语法:只需在花括号内的变量或算式末尾加上 =,输出时就会自动把“表达式原文=”和“计算结果”一并打印出来。

# 适用环境:Python 3.8+(使用了 = 自记录特性)
batch_size = 64
learning_rate = 0.0015
tag_name = "v2.1\nbeta"

# 1. 等号(=)自记录调试:自动输出“变量名=值”,保留空格且支持后接格式符
print(f"参数检查:{batch_size=}, {batch_size * 2 = }, {learning_rate = :.4f}")

# 2. 转换标志 !r(调用 repr() 显示引号与转义符)与 !a(仅 ASCII)
print(f"普通输出:{tag_name}")
print(f"原始表示(!r):{tag_name!r}")

# 3. 双花括号 {{ }} 转义:在结果中输出字面量 { 和 }
json_template = f'{{"status": 200, "batch": {batch_size}}}'
print(f"生成的JSON片段:{json_template}")
示例输出参数检查:batch_size=64, batch_size * 2 = 128, learning_rate = 0.0015 普通输出:v2.1 beta 原始表示(!r):'v2.1\nbeta' 生成的JSON片段:{"status": 200, "batch": 64}

当需要使用 f-string 生成包含花括号的文本(如 JSON 字符串、正则表达式中的量词 \d{4} 或前端模板代码)时,不能使用反斜杠 \{ 转义,而是要将单个花括号写成两个连续的花括号 {{ 或 }}。如果既要输出字面量花括号,又要在其中嵌入变量,就需要连写三个花括号,例如 f"{{{batch_size}}}" 会输出 {64}(外层两个花括号转义为一个字面量花括号,内层一个花括号负责变量求值)。

python必背源代码f-string格式化字符串代码
图 3:编写 f-string 格式化代码及排查 SyntaxError / ValueError 的步骤

多行拼接、原始 f-string 与常见报错处理

当一条 SQL 查询提示、长日志消息或配置摘要超过一行时,可以利用 Python 相邻字符串字面量自动合并的特性,将一段长 f-string 拆成多行放入圆括号中。每一行字符串前都需单独加上 f,这样既不会像三引号 f"""...""" 那样把代码缩进的空格也一并带入输出结果,又能保持每行代码宽度适中。

# 适用环境:Python 3.8+
service_name = "order-worker"
retry_count = 3
timeout_sec = 1.5
regex_digits = 4

# 1. 圆括号内多行 f-string 自动无缝拼接(不含多余缩进空格)
alert_msg = (
    f"[告警服务] 名称:{service_name} | "
    f"重试次数:{retry_count:02d} 次 | "
    f"超时阈值:{timeout_sec:.1f}s"
)
print(alert_msg)

# 2. 原始格式化字符串(rf"..."):同时启用正则反斜杠不转义与变量替换
# 注意正则量词的 {4} 需要写为 {{4}},或者用三个花括号包裹变量 {{{regex_digits}}}
pattern_str = rf"^\d{{{regex_digits}}}-[A-Z]{{2}}$"
print(f"生成的正则模式:{pattern_str}")

# 3. 兼容 Python 3.8~3.11 的换行符拼接写法(将 \n 提至变量,避免在 {} 内写反斜杠)
items = ["初始化连接池", "加载路由表", "启动健康检查"]
newline = "\n  - "
print(f"启动步骤清单:\n  - {newline.join(items)}")
示例输出[告警服务] 名称:order-worker | 重试次数:03 次 | 超时阈值:1.5s 生成的正则模式:^\d{4}-[A-Z]{2}$ 启动步骤清单: - 初始化连接池 - 加载路由表 - 启动健康检查

高频报错原因与修正方法

在使用 f-string 时,有两类最常遇到的报错需要根据版本与场景区分处理:

第一类是 SyntaxError: f-string expression part cannot include a backslash。在 Python 3.11 及之前的版本中,花括号内部禁止出现任何反斜杠 \,因此写 f"{'\n'.join(items)}" 会直接触发语法错误。修正方法如上方示例第 3 段所示,先在外部定义 newline = "\n",再写 f"{newline.join(items)}";如果运行环境已升级至 Python 3.12 及以上版本,解释器已原生支持在花括号内使用反斜杠和相同引号。

第二类是日志与数据库查询中的误用。使用标准库 logging 记录大量调试日志时,或者使用数据库驱动(如 sqlite3、psycopg2)执行 SQL 查询时,不要直接用 f-string 把用户输入拼接到 SQL 语句中。直接写 f"SELECT * FROM users WHERE name = '{user_input}'" 会引入严重的 SQL 注入风险,此时必须改用驱动提供的参数化占位符(如 ? 或 %s),仅在纯展示文本、控制台输出和确定安全的内部键值构造中使用 f-string。

python必背源代码f-string格式化字符串代码
图 4:Python f-string 四大高频场景必背代码速查图

必背语法速查表

为方便日常写代码时快速核对,下表整理了最具代表性的 f-string 源代码片段及其功能说明:

目标效果 必背源代码写法 关键说明与版本要求
保留 2 位小数 f"{price:.2f}" 四舍六入五成双,不足位数自动补 0(Python 3.6+)
千位逗号分隔并保留 2 位小数 f"{amount:,.2f}" 逗号 , 必须位于 .2f 左侧(Python 3.6+)
小数转百分比(保留 1 位) f"{ratio:.1%}" 自动将数值乘以 100 并在末尾添加 %(Python 3.6+)
整数左侧补零至固定宽度 f"{num:06d}" 不足 6 位在左侧补 0,超过 6 位则按原长输出(Python 3.6+)
左/右/居中对齐并填充字符 f"{text:<10}" / f"{text:*^10}" < 左对齐,> 右对齐,^ 居中对齐(Python 3.6+)
日期时间直接格式化 f"{dt:%Y-%m-%d %H:%M:%S}" dt 为 datetime 或 date 实例(Python 3.6+)
同时打印变量名与计算结果 f"{score=}" / f"{score=:.2f}" 输出如 score=95.50,适合调试排错(Python 3.8+)
输出字面量花括号 {} f"{{key}}: {value}" 用双花括号 {{ 和 }} 转义,不可用 \{(Python 3.6+)
相关专题:

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

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 算法库。