Python格式化字符串(格式化输出)

1年前 (2024-04-27)

我们在《个Python程序——在屏幕上输出文本》中讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。

熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的。

print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。

表 1 Python 转换说明符

转换说明符

解释

%d、%i

转换为带符号的十进制整数

%o

转换为带符号的八进制整数

%x、%X

转换为带符号的十六进制整数

%e

转化为科学计数法表示的浮点数(e 小写)

%E

转化为科学计数法表示的浮点数(E 大写)

%f、%F

转化为十进制浮点数

%g

智能选择使用 %f 或 %e 格式

%G

智能选择使用 %F 或 %E 格式

%c

格式化字符及其 ASCII 码

%r

使用 repr() 函数将表达式转换为字符串

%s

使用 str() 函数将表达式转换为字符串


转换说明符(Conversion Specifier)只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。

【实例】输出一个整数:

age = 8

print("C语言中文网已经%d岁了!" % age)

运行结果:
C语言中文网已经8岁了!

在 print() 函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。本例的格式化字符串中包含一个%d说明符,它最终会被后面的 age 变量的值所替代。

中间的%是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。

当然,格式化字符串中也可以包含多个转换说明符,这个时候也得提供多个表达式,用以替换对应的转换说明符;多个表达式必须使用小括号( )包围起来。请看下面的例子:

name = "C语言中文网"

age = 8

url = "http://c.biancheng网站站点" rel="nofollow" />

C语言中文网已经8岁了,它的网址是http://c.biancheng网站站点" rel="nofollow" />

n = 1234567

print("n(10):%10d." % n)

print("n(5):%5d." % n)

url = "http://c.biancheng网站站点" rel="nofollow" />

n(10): 1234567.

n(5):1234567.

url(35): http://c.biancheng网站站点" rel="nofollow" />

n = 123456

# %09d 表示最小宽度为9,左边补0

print("n(09):%09d" % n)

# %+9d 表示最小宽度为9,带上符号

print("n(+9):%+9d" % n)

f = 140.5

# %-+010f 表示最小宽度为10,左对齐,带上符号

print("f(-+0):%-+010f" % f)

s = "Hello"

# %-10s 表示最小宽度为10,左对齐

print("s(-10):%-10s." % s)

运行结果:

n(09):000123456

n(+9): +123456

f(-+0):+140.500000

s(-10):Hello .

指定小数精度

对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。

精度值需要放在最小宽度之后,中间用点号.隔开;也可以不写最小宽度,只写精度。具体格式如下:

%m.nf

%.nf

m 表示最小宽度,n 表示输出精度,.是必须存在的。

请看下面的代码:

f = 3.141592653

# 最小宽度为8,小数点后保留3位

print("%8.3f" % f)

# 最小宽度为8,小数点后保留3位,左边补0

print("%08.3f" % f)

# 最小宽度为8,小数点后保留3位,左边补0,带符号

print("%+08.3f" % f)

运行结果:

3.142

0003.142

+003.142