跳转至

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 范式,要留有印象、能自己读懂。

示例与演示

  1. f-string 基础(约 00:55):在字符串前加 f,{} 中放变量直接替换;进一步演示 {} 内写表达式(切片、变量+1)也能正确求值显示。
  2. format 四种写法对比(约 03:19):用同一个字符串分别演示:顺序占位 { } { }、显式编号 {0} {1} 及反序 {1} {0}、命名占位 {a}/{abc}、序号与命名混用,四种方式输出结果相同。
  3. 成绩单输出对齐(约 07:47,沿用上节课结尾的字典排序 + 匿名函数示例):把排序后的成绩单打印成 01. 姓名 分数 的对齐表格。同一功能给出三种写法:
  4. f-string:f"{rank:02d}. {name:>5} {score:<3}"(约 10:58);
  5. format 顺序传参,占位符省略变量名;
  6. format 序号 + 字典下标:{1[name]}、{1[score]} 直接取 student 字典的成员。 老师逐字符对照输出结果,指出姓名列五个字符右对齐、成绩三个数字左对齐。
  7. 查阅官方文档(约 15:45):打开 Python 官方文档的格式规格说明页,讲解 BNF 范式的基本读法。

重点与难点

  • f-string 花括号内可写任意表达式,不只是变量。
  • format 占位符的三种对应方式(顺序、编号、命名)及混用。
  • 格式规格写法:{变量:规则},常见规则如 02d(补零定宽数字)、>5(右对齐宽度 5)、<3(左对齐宽度 3)。
  • 易错点:format 中用方括号取字典 key 时 key 不加引号。
  • 对齐、补零、定宽是实际打印表格类输出时的刚需。

关联内容

  • 前置:之前课程讲过最简单的一种(类似 C 语言的)格式化方法;成绩单示例沿用了上一节课末尾的字典、排序、匿名函数综合示例。
  • 本课的对齐输出(补零、定宽)在 7.4 节 ASCII 图练习中逐行写文本时有间接应用。
  • f-string 的 : 后规则即官方文档的"格式规格迷你语言",与 BNF 范式的阅读能力相关联(后续看各种语言文档都会用到)。