news 2026/10/5 12:30:18

30-seconds-of-code 的 Python 字符串格式化指南:f-string 与 str.format() 两种方式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
30-seconds-of-code 的 Python 字符串格式化指南:f-string 与 str.format() 两种方式详解
  • 教程
  • 文档

【免费下载链接】30-seconds-of-code

Coding articles to level up your development skills

项目地址:https://gitcode.com/gh_mirrors/30/30-seconds-of-code
点击查看免费下载

字符串格式化是 Python 日常开发中使用频率最高的操作之一。本文基于 30-seconds-of-code 仓库中的 fstrings-str-format.md 技巧文档,系统讲解 Python 中两种主流的字符串格式化方式——f-string(格式化字符串字面量)与str.format()方法,并延伸介绍它们的高级格式化能力与实战用法。读完本文,你将掌握两种方式的语法差异、适用场景与选择依据,能够写出更简洁、更可读、更不易出错的格式化代码。

文档背景:这条技巧在仓库中的定位

该技巧文档位于仓库的 Python 内容目录 content/snippets/python/s/fstrings-str-format.md,归属于 Python 字符串集合(slug 为python/string,标签为string)。该集合服务于 Python 3.6 及以上版本,涵盖字符串格式化与操作等常用工具。同一集合中还包含 6-f-strings-tips.md(f-string 的 6 个实用技巧)与 hex-to-rgb.md(十六进制颜色与 RGB 互转)等文章,其中后者的实现正好用到了str.format(),可作为本文的实战佐证。

方式一:f-string(格式化字符串字面量)

格式化字符串字面量(Formatted string literals),俗称f-string,是以'f'或'F'前缀开头的字符串字面量。这类字符串内部可以包含替换字段(replacement fields),用一对花括号{}包裹。f-string 中的替换字段会在求值时被自动替换为对应表达式的值,因此它是三种方式中最直观、最简洁的一种。

原文档给出的基础示例:

name = 'John' age = 32 print(f'{name} is {age} years old') # 'John is 32 years old'

可以看到,变量直接写在花括号内,代码与最终输出一一对应,可读性极强。由于 f-string 在 Python 3.6 中才被引入,使用时请确保运行环境满足 Python 3.6+(这与本仓库 Python 集合的版本定位一致)。

花括号内不止能放变量

f-string 的替换字段中可以是任意合法表达式,这正是它相比传统方式的核心优势。结合仓库中的姊妹文章 6-f-strings-tips.md,我们可以延伸出以下高频用法:

1. 打印变量名与值(调试利器)

在花括号内的变量名后加一个等号=,即可同时输出变量名与其值。注意花括号内的空白字符会被原样保留,因此可以借助空格让输出更易读:

str_val = 'apples' num_val = 42 print(f'{str_val=}, {num_val = }') # str_val='apples', num_val = 42

2. 在花括号内直接做数学运算

你可以在花括号中书写数学表达式,配合=还能同时打印表达式本身与计算结果:

num_val = 42 print(f'{num_val % 2 = }') # num_val % 2 = 0

3. 获取值的可打印表示(repr)

在花括号内的表达式后追加!r,等价于对该值调用repr(),可以快速得到其可打印表示(例如字符串会带引号):

str_val = 'apples' print(f'{str_val!r}') # 'apples'

f-string 的数字与日期格式化

“f” 代表 “format”,意味着 f-string 本身就是为格式化而生的。在花括号内使用冒号:后接格式说明符(format specifier),即可控制值的展示形式。格式说明符也可以与前面的=结合使用,同时打印变量名与格式化后的值。

数字格式化:例如用.2f将数值截取到小数点后两位(注意是四舍五入):

price_val = 6.12658 print(f'{price_val:.2f}') # 6.13

日期格式化:日期对象同样支持格式说明符,常用的占位符包括%Y(完整年份)、%m(月份)、%d(日):

from datetime import datetime date_val = datetime.utcnow() print(f'{date_val=:%Y-%m-%d}') # date_val=2021-07-09

提示:datetime.utcnow()在较新的 Python 版本中已被标记为弃用,建议使用datetime.now(datetime.timezone.utc)获取带时区信息的当前时间,格式化语法完全一致。

方式二:str.format()方法

str.format()的格式化能力与 f-string 非常相似,核心区别在于替换字段不再写在字符串内部,而是作为方法的参数传入。字符串模板中的{}占位符与参数按位置或名称对应。

原文档给出的基础示例:

name = 'John' age = 32 print('{0} is {1} years old'.format(name, age)) # 'John is 32 years old'

示例中使用的是位置参数:{0}对应第一个参数name,{1}对应第二个参数age。除了数字位置,str.format()还支持以下形式:

  • 关键字参数:'{name} is {age} years old'.format(name='John', age=32);
  • 空占位符:'{} is {} years old'.format(name, age),按出现顺序自动匹配参数;
  • 属性与下标访问:'{0.first_name}'.format(user)、'{0[0]}'.format(items)。

str.format()在仓库中的实战案例

同属 Python 字符串集合的 hex-to-rgb.md 中,RGB → Hex转换函数正是一个典型的str.format()应用——它利用'{:02X}'占位符构造零填充的大写十六进制格式,并将模板复制三次后一次性填充三个通道值:

def rgb_to_hex(r, g, b): return ('{:02X}' * 3).format(r, g, b) rgb_to_hex(255, 165, 1) # 'FFA501'

这段代码的价值在于展示了str.format()的三个特性:

  1. 占位符可以携带格式说明符:{:02X}表示“两位宽度、前置零、大写十六进制”;
  2. 模板可以动态拼接:('{:02X}' * 3)在运行时生成'{:02X}{:02X}{:02X}';
  3. 位置参数按序填充:r、g、b依次填入三个占位符。

两种方式如何选择?

维度f-stringstr.format()
引入版本Python 3.6+Python 2.6 / 3.0+
语法形式表达式直接内嵌于字符串占位符模板 + 参数传入
可读性值就在字符串中,直观清晰模板与参数分离,长模板时较难对应
延迟求值字符串创建时立即求值模板可先构造、后填充
典型场景日常拼接、调试输出、日志需要复用/预定义模板、跨 Python 2 代码

选择建议:

  • 日常开发优先用 f-string。正如 6-f-strings-tips.md 所述,f-string 比传统方式更可读、更简洁、更不易出错,配合=调试技巧与!r/格式说明符,几乎覆盖所有格式化需求;
  • 需要“模板复用”时用str.format()。例如上面rgb_to_hex的写法,模板字符串可以先独立构造、按需填充;在需要把格式化模板作为配置项或消息模板传递的场景(如 i18n、日志模板)中,str.format()更为合适;
  • 兼容老版本 Python 时用str.format()。若代码库需要运行在 Python 2.x 或 3.0–3.5 环境,f-string 不可用,此时str.format()是较好的选择。

小结

本文围绕 30-seconds-of-code 仓库的 fstrings-str-format.md 技巧,完整讲解了 f-string 与str.format()两种字符串格式化方式的语法、区别与选择依据,并结合仓库中的 6-f-strings-tips.md 与 hex-to-rgb.md 两篇同集合文章,补充了变量名打印、表达式计算、repr转换、数字与日期格式化、占位符模板复用等实战用法。掌握这两种方式,足以应对 Python 开发中绝大多数字符串格式化场景。

  • 教程
  • 文档

【免费下载链接】30-seconds-of-code

Coding articles to level up your development skills

项目地址:https://gitcode.com/gh_mirrors/30/30-seconds-of-code
点击查看免费下载

相关推荐

上一篇:Ant Design数字输入框:InputNumber组件高级用法
下一篇:如何避免重蹈覆辙?Failed-ML项目中的经典机器学习失败案例解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 12:30:09

大模型从会聊天到会干活:提示词与工具调用实战指南

1. 从“会聊天”到“会干活”的分水岭到底在哪很多人第一次接触大模型,都是从聊天开始的。你问它一句“帮我写个周报”,它噼里啪啦给你输出一大段,看着挺像那么回事。但真到了要它去查数据库、调接口、发邮件、改代码、跑脚本的时候&#xff…

作者头像 李华
网站建设 2026/10/5 12:27:15

OpenRIG开源模拟赛车座舱搭建指南:铝型材DIY完整避坑

最近我在模拟赛车圈子里关注到一套很有意思的开源方案,叫 OpenRIG。它不是某个品牌出的成品支架,也不是那种看起来很唬人的广告图,而是一整套基于开源图纸、通用铝型材和标准紧固件拼装起来的赛车模拟器座舱。简单说,就是你可以用…

作者头像 李华
网站建设 2026/10/5 12:26:26

生成式AI服务管理实战:从模型层到交互层的落地要点

一个生成式人工智能服务从“跑通 Demo”到“稳定可用”,中间差的往往不是模型选得多强,而是管理得有没有章法。最近不少人都在聊“生成式人工智能服务管理”这个话题,各家文章大多围绕宏观框架展开,真正到团队执行层面的实践经验反…

作者头像 李华
网站建设 2026/10/5 12:26:25

高频功率放大器设计全攻略:从指标定义到调试避坑指南

1. 立项之前,先想清楚指标之间的“三角债”高频功率放大器的设计,很多人一上来就翻管子型号、画原理图,觉得把管子焊上去就能出功率。我在这个行当里做过不少项目,实事求是讲,功放是射频链路里最容易被“一票否决”的模…

作者头像 李华
网站建设 2026/10/5 12:26:24

继电保护整定计算全流程解析:从短路电流到定值单实战指南

咱们搞继电保护的人,电脑里谁没存过几十套整定计算书、方案模板?但真到要出计算书、做定值单、应付审查的时候,往往还是觉得心里没底。这阵子我整理了一套完整的继电保护整定值计算软件配套资料,总共69份,从原理说明到…

作者头像 李华
网站建设 2026/10/5 12:21:27

Claude Code Skill 实战:50个Skill踩坑总结与高效设计指南

1. 从 50 个 Skill 里踩出来的血泪教训我在过去几个月里陆陆续续写了 50 个 Claude Code Skill,从最开始照着文档瞎写,到后来慢慢摸出规律,中间踩的坑实在太多了。最扎心的一个发现是:前 30 个基本等于白写。不是功能跑不起来&…

作者头像 李华