Python 字符串之格式化输出
Python 的字符串格式化传统有两种方式:%-formatting 方式以及 format 方式。除此之外,从 Python 3.6 开始映入了一种新的格式化方法:f-string,与传统格式化方法相比,f-string 不仅更易读,更简洁,不易出错,而且速度更快!本文将详解三种字符串格式化方法的用法。
% 格式符方法
% 格式符 语法规则如下:
%[(var-name)][flags][width][.precision]typecode
参数详解
[1] >>>> (var-name)
(var-name)
为命名参数,可选。用于指定 key,即用于变量映射(参数为字典) 。
[2] >>>> flags
flags
为对齐方式以及数值符号设置参数,可选。可供选择的值有:+
,-
,空格
或 0
。
+
:右对齐;正数前加正好,负数前加负号;空格
:右对齐;正数前加空格,负数前加负号;0
:右对齐;正数前无符号,负数前加负号,用 0 填充空白处;-
:左对齐;正数前无符号,负数前加负号。
[3] >>>> width
width
为显示宽度设置参数,可选。
[4] >>>> .precision
.precision
为小数点后精度设置参数,可选。
[5] >>>> typecode
typecode
为类型码参数,必选。常用类型码如下:
s
:字符串 类型码 (采用str()
的显示 );r
:字符串 类型码 (采用repr()
的显示 );d
:十进制整数 类型码,将整数、浮点数转换成 十 进制表示;i
:十进制整数 类型码,将整数、浮点数转换成 十 进制表示;o
:八进制整数 类型码,将整数转换成 八 进制表示;x
:十六进制整数 类型码,将整数转换成 十六 进制表示;e
:指数 类型码(基底写为 e),将整数、浮点数转换成 科学计数法;E
:指数 类型码(基底写为 E),将整数、浮点数转换成 科学计数法;f
:浮点数 类型码,将整数、浮点数转换成 浮点数表示;F
:浮点数 类型码,将整数、浮点数转换成 浮点数表示;g
:指数或浮点数类型码,自动调整将整数、浮点数转换成 浮点型或科学计数法 表示,超过 6 位数用基底为 e 科学计数法;智能选择使用 %f 或 %e 格式;%%
:字符 “%” 类型码。
测试样例
[1] >>>> var-name
1 | "python" name = |
[2] >>>> flags && width
1 | 'python' name = |
[3] >>>> .precision
1 | 123.321 f = |
[4] >>>> typecode
1 | 'TheMusicIsLoud', 20, 12.3 a,b,c = |
缺点
我们可以发现,一旦我们开始使用多个参数和更长的字符串,代码将很快变得不太容易阅读。事情已经开始显得有点凌乱:
1 | first_name = "Eric" |
冗长,不能正确显示元组或字典都是它的缺点。
Format 方法
Python 中除了上述我们介绍过的 %
格式化方法,还可以通过 {} 和 : 来代替以前的 %
完成格式化输出,增强了字符串格式化的功能。
format 格式符语法规则如下:
[fill][align][sign][#][width][,][.precision][typecode]
参数详解
[1] >>>> fill
fill
为空白处可填充字符设置参数,可选。
[2] >>>> align
align
为对齐方式设置参数,可选,需要配和 width
参数使用。
<
:内容左对齐;>
:内容右对齐(默认);=
:内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。即,符号+填充物+数字。^
:内容居中。
[3] >>>> sign
sign
为有无符号数字设置参数,可选。
+
:正号加正,负号加负;-
:正号不变,负号加负;空格
:正号空格,负号加负。
[4] >>>> #
#
为是否显示进制前缀设置参数,可选。对于二进制、八进制、十六进制,如果加上 #
,会显示 0b/0o/0x
,否则不显示。
[5] >>>> ,
,
为数字分割符设置参数,可选。如:1,000,000
。
[6] >>>> width
width
为显示宽度设置参数,可选。
[7] >>>> .precision
.precision
为小数点后精度设置参数,可选。
8)typecode
typecode
为类型码参数,可选(注意这里变为可选参数)。常用类型码如下:
空白
:未指定类型,则默认是None,同s
;s
:字符串 类型码 (采用str()
的显示 );r
:字符串 类型码 (采用repr()
的显示 );d
:十进制整数 类型码,将整数、浮点数转换成 十 进制表示;i
:十进制整数 类型码,将整数、浮点数转换成 十 进制表示;o
:八进制整数 类型码,将整数转换成 八 进制表示;x
:十六进制整数 类型码,将整数转换成 十六 进制表示;e
:指数 类型码(基底写为 e),将整数、浮点数转换成 科学计数法;E
:指数 类型码(基底写为 E),将整数、浮点数转换成 科学计数法;f
:浮点数 类型码,将整数、浮点数转换成 浮点数表示;F
:浮点数 类型码,将整数、浮点数转换成 浮点数表示;g
:指数或浮点数类型码,自动调整将整数、浮点数转换成 浮点型或科学计数法 表示,超过 6 位数用基底为 e 科学计数法;智能选择使用 %f 或 %e 格式;%
:显示百分比(默认显示小数点后 6 位) 类型码。
测试样例
[1] >>>> fill && align && width
1 | "{:*^20}".format('welcome') s1 = |
[2] >>>> #
我们还可以通过引用其索引(或变量名称)来以任何顺序引用变量:
1 | "numbers: {:b},{:o},{:d},{:x},{:X}, {:%},{:c}".format(16, 15, 14, 13, 12, 0.87623,99) a1 = |
[3] >>>> , && .precision
1 | '{:,d}'.format(100000000) s1 = |
[4] >>>> 常用格式化
1 | "i am {}, age {}, {}".format("seven", 18, 'alex') tp1 = |
缺点
尽管一定程度上增强了 %-formatting
功能,但当我们开始使用多个参数和更长的字符串,还是具有冗长问题:
1 | first_name = "Eric" |
f-string
Python 自 Python 3.6 开始在标准库加入一种改进 Python 格式字符串的新方法:f-string。
f-string 在功能方面不逊于传统的:%-formating 和 format 方法,同时性能又优于二者,且使用起来也更加简洁明了。故,Python3.6 及以后的版本,推荐使用 f-string 进行字符串格式化 <– 如何使用?。
install_url
to use ShareThis. Please set it in _config.yml
.