7.2 输入输出:格式化字符串进阶¶
内容梗概¶
本课在之前讲过的最简单(类似 C 语言)格式化方法基础上,讲解 Python 字符串格式化的进阶方式。重点介绍了两种主流方法:f-string(格式化字符串字面量)和 str.format() 方法,并演示了 format 的位置参数编号、关键字参数命名、序号与命名混用、以及用下标直接取字典/列表成员的用法。随后结合成绩单示例讲解了格式规格迷你语言(format spec),实现对齐、补零、定宽等精细输出控制,最后借官方文档顺带科普了 BNF 范式的读法。
知识点详解¶
f-string(格式化字符串字面量)(约 00:30)¶
- 用法:在要输出的字符串前加小写
f或大写F(两者等价),字符串内部用花括号{}把变量括起来,运行时会把变量的值替换进去。例如f"{name} {age}"。 - 花括号里**不仅可以是变量,还可以是表达式**,甚至调用对象的方法,比如切片、
变量+1等,都会被"算出来"再显示(约 01:52)。 - 老师评价:这是最简单易用的方式。
str.format() 方法(约 02:48)¶
- 任何字符串对象都有
.format()方法。字符串里用花括号{}占位,format的参数按顺序替换占位符。有几个占位符就传几个参数。 - 位置编号(约 03:32):占位符可以显式编号,默认从 0 开始。
{0}对应format的第一个参数、{1}对应第二个;可以反过来写{1} {0}改变替换顺序,输出内容不变。 - 关键字命名(约 04:24):占位符可以起名字(如
{a}、{abc}),调用时以format(a=..., abc=...)的形式按名字赋值,类似函数的关键字参数。 - 混用(约 05:15):序号占位符和命名占位符可以在同一个字符串里混用。
- 老师建议:掌握其中一两种即可,按自己习惯来。
格式规格迷你语言(format spec)(约 06:58)¶
- 语法:在变量后加冒号
:,冒号后写格式规则。例如 f-string 中f"{rank:02d}"。 - 结合成绩单示例讲解的规则(约 08:38 起):
02d:0表示空位用零填充,2表示占两个宽度,d表示按十进制数字显示——即"占两位的数字,不足两位前面补零",用于打印名次 01、02…。>5:>表示右对齐,5表示总宽度 5 个字符——用于对齐长短不一的姓名。<3:左对齐、宽度 3——用于成绩(最多 100 分,三个数字)。- 该内容在 C 语言中已有所涉及,老师未展开全部细节,建议有兴趣的同学查阅官方文档的"格式规格迷你语言"(Format Specification Mini-Language)。
format 中直接取容器成员(约 14:20)¶
- 当
format的参数是字典、列表或元组时,可以在占位符里用序号加方括号直接取成员,如{1[name]}、{1[score]}: 1表示format的第二个参数(下标从 0 开始);- 方括号内是字典的 key,注意这种写法里 key 不加引号(约 14:51,老师特别提醒);
- 列表/元组则填数字索引。
- 这是一种很便捷("或者说偷懒")的写法。
BNF 范式(约 15:45)¶
- 官方文档中描述格式说明符(format spec)时使用的那种形式化写法叫 BNF 范式,可用来描述一个简单语言的语法。
- 读法:由若干符号按顺序组成,方括号括起来的部分是可选的;如
fill表示可用任意字符填充,align有多种对齐方式,sign表示正负号的显示方式等。 - 老师特意科普的原因:以后学其他语言、看各种官方文档会经常遇到 BNF 范式,要留有印象、能自己读懂。
示例与演示¶
- f-string 基础(约 00:55):在字符串前加
f,{}中放变量直接替换;进一步演示{}内写表达式(切片、变量+1)也能正确求值显示。 - format 四种写法对比(约 03:19):用同一个字符串分别演示:顺序占位
{ } { }、显式编号{0} {1}及反序{1} {0}、命名占位{a}/{abc}、序号与命名混用,四种方式输出结果相同。 - 成绩单输出对齐(约 07:47,沿用上节课结尾的字典排序 + 匿名函数示例):把排序后的成绩单打印成
01. 姓名 分数的对齐表格。同一功能给出三种写法: - f-string:
f"{rank:02d}. {name:>5} {score:<3}"(约 10:58); - format 顺序传参,占位符省略变量名;
- format 序号 + 字典下标:
{1[name]}、{1[score]}直接取 student 字典的成员。 老师逐字符对照输出结果,指出姓名列五个字符右对齐、成绩三个数字左对齐。 - 查阅官方文档(约 15:45):打开 Python 官方文档的格式规格说明页,讲解 BNF 范式的基本读法。
重点与难点¶
- f-string 花括号内可写任意表达式,不只是变量。
- format 占位符的三种对应方式(顺序、编号、命名)及混用。
- 格式规格写法:
{变量:规则},常见规则如02d(补零定宽数字)、>5(右对齐宽度 5)、<3(左对齐宽度 3)。 - 易错点:format 中用方括号取字典 key 时 key 不加引号。
- 对齐、补零、定宽是实际打印表格类输出时的刚需。
关联内容¶
- 前置:之前课程讲过最简单的一种(类似 C 语言的)格式化方法;成绩单示例沿用了上一节课末尾的字典、排序、匿名函数综合示例。
- 本课的对齐输出(补零、定宽)在 7.4 节 ASCII 图练习中逐行写文本时有间接应用。
- f-string 的
:后规则即官方文档的"格式规格迷你语言",与 BNF 范式的阅读能力相关联(后续看各种语言文档都会用到)。