字符串格式化表达式——高级格式化表达式实例
格式化目标语法在 Python 标准手册和参考书中有完整的文档,但为了展示日常用法,让我们看一些例子。这个例子先默认格式化整数,然后在 6 字符宽的字段中左对齐,然后填充 0:
>>> x = 1234
>>> res = 'integers: ...%d...%−6d...%06d' % (x, x, x)
>>> res
'integers: ...1234...1234 ...001234'
%e
, %f
, %g
格式以不同方式显示了浮点数,如下面的交互显示的 ——%E
和 %e
想同,但幂为大写,g
通过数字内容来选择格式(正式定义为:如果幂小于 -4 或不小于精度,则使用含有幂的格式 e
:
# 如果幂小于 -4
>>> x = 0.0000123456789
>>> '%e | %f | %g' % (x, x, x)
'1.234568e-05 | 0.000012 | 1.23457e-05'
# 如果不小于精度(6位)
>>> x = 1234567
>>> '%e | %f | %g' % (x, x, x)
'1.234567e+06 | 1234567.000000 | 1.23457e+06'
否则使用小数格式 f
(g
带有默认的总数字精度为 6)):
>>> x = 1.23456789
>>> x # 在 2.7 和 3.1 版本前显示更多数位
1.23456789
>>> '%e | %f | %g' % (x, x, x)
'1.234568e+00 | 1.234568 | 1.23457'
>>> x = 123456
>>> '%e | %f | %g' % (x, x, x)
'1.234560e+05 | 123456.000000 | 123456'
>>> x = 0.000123456789
>>> '%e | %f | %g' % (x, x, x)
'1.234568e-04 | 0.000123 | 0.000123457'
>>> '%E' % x
'1.234568E+00'
对浮点数字,可以通过指定左对齐,0 填充,数字符号,总字段宽度和小数点后的数位来达到许多额外的格式化效果。对更简单的任务,可以使用简单的转换为字符串(使用 %s
格式表达式或之前展示的 str
内置函数)来勉强应对:
>>> x = 1.23456789
>>> '%−6.2f | %05.2f | %+06.1f' % (x, x, x)
'1.23 | 01.23 | +001.2'
>>> '%s' % x, str(x)
('1.23456789', '1.23456789')
当大小直到运行时才知道时,可以使用计算出的宽度和精度(通过在格式字符串中使用 *
来指定,从而强制它们的值从 %
操作符右边的输入中的下一项获得 —— 这里元组中的 4 给出了精度):
>>> '%f, %.2f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0)
'0.333333, 0.33, 0.3333'
如果对这个特性感兴趣,使用一些这些例子来实验并亲自操作来获得更多深刻见解。