格式化字符串(string formatting)是以指定输出参数格式和相对位置来“美化”字符串。输出参数格式包括数字的小数点位数、字符串大小写等,相对位置标注出被格式化的词是在句中的位置。比如:
print('It costs %.2f.' %(123.456))
It costs 123.46.
其中 %.2f 是 123.456 的输出参数格式,.2f 代表保留小数点两位,而 %.2f 所在的位置在 costs 后面,意思说将 123.456 变成 123.46 后插在 costs 后面。
格式化字符串有四种方法:
- 用 % 字符 (上面用的)
- 用 $ 字符
- 用 format() 函数
- 用 f-string
本文中主要以下面这句话举例子,即“在 2020 年 3 月 4 日,阿里巴巴的市值为 553789 百万美元”。
s = 'On 04 Mar 2020, the market cap of Alibaba is 553789 mio USD.'
首先定义市值(Mcap)和货币单位(curr)两个变量。
Mcap = 553789
curr = 'USD'
下面开始展示四种格式化的方法。
1. 用 % 字符格式化
print('The market cap of Alibaba is %d mio %s.' %(Mcap, curr))
The market cap of Alibaba is 553789 mio USD.
该方法的核心范式是:
步骤:
- 首先写句子;
- 再用 % 加小括号,里面列出要被格式化的变量名;
- 最后在句子一一对应变量名的地方写出 %x(d 代表数字,s 代表字符串,等等)。
2. 用 $ 字符格式化
from string import Template
info = dict(Mcap=Mcap, curr=curr)
print(Template('The market cap of Alibaba is $Mcap mio $curr.').substitute(info))
The market cap of Alibaba is 553789 mio USD.
该方法的核心范式是:
在此方法下,我们需要将变量名和变量值作为键和值,创建一个字典。
步骤:
- 首先要调用 Template 库函数并将句子传给它;
- 再把字典传入 substitute() 函数;
- 最后在句子一一对应变量名的地方写出 $k(k 代表字典中的键)。
3. 用 format 函数格式化
print('The market cap of Alibaba is {} mio {}.'.format(Mcap, curr))
The market cap of Alibaba is 553789 mio USD.
该方法的核心范式是:
步骤:
- 首先写句子;
- 再用 format() 函数,里面列出要被格式化的变量名;
- 最后在句子一一对应变量名的地方只用写出 {}。
4. 用 f-string 方法格式化
print(f'The market cap of Alibaba is {Mcap} mio {curr}.')
The market cap of Alibaba is 553789 mio USD.
该方法的核心范式是:
步骤:
- 首先写出句子,以 f' ' 或 F' ' 的形式;
- 然后在句子只用写出 {v},其中 v 是要被格式的变量。
当决定用哪种格式化时,通常我们评估它是否简单直观而且符合自己的习惯,比如
- 那些有 C 语言背景的使用者就偏向用 “%” 字符
- 那些偏好标准化的使用者就偏向用 "$" 字符
- 那些偏好个性化的使用者就偏向用 format 函数