多年来,Python 具有出色的字符串格式化程序,但是有关它们的文档在理论和技术上都太过严格了。通过此站点,我们尝试通过实际示例向您展示新旧风格的字符串格式化 API 涵盖的最常见的用例。
此页面上的所有示例均可与 Python 2.7、3.2、3.3、3.4 和 3.5 一起使用,而无需任何额外的库。
基本的格式化
简单的位置格式化可能是最常见的用例。如果参数的顺序不太可能改变,并且只有很少的元素要连接,可以采用这样的格式化风格。
由于元素没有像名称一样具有描述性,因此这个简单的风格仅应用于格式化相对少量的元素。
Old | '%s %s' % ('one', 'two') |
New | '{} {}'.format('one', 'two') |
Output | one two |
Old | '%d %d' % (1, 2) |
New | '{} {}'.format(1, 2) |
Output | 1 2 |
使用新的格式化风格(在 Python 2.6 中甚至是强制性的),可以为占位符提供显式的位置索引。
这允许在不更改参数的情况下重新排列显示顺序。
此操作不适用于旧的格式化风格。
New | '{1} {0}'.format('one', 'two') |
Output | two one |
值转换
新的简单格式化器默认调用对象的 __format__() 方法来呈现它。如果你只想呈现 str(…) 或 repr(…) 的输出,你可以使用 !s 或 !r 转换标志。
class Data(object):
def __str__(self):
return 'str'
def __repr__(self):
return 'repr'
Old | '%s %r' % (Data(), Data()) |
New | {0!s} {0!r}'.format(Data()) |
Output | str repr |
在 Python 3 中,存在一个附加的转换标志,该标志使用 repr(…) 的输出,但使用 ascii(…) 代替。
class Data(object):
def __repr__(self):
return 'räpr'
Old | '%r %a' % (Data(), Data()) |
New | '{0!r} {0!a}'.format(Data()) |
Output | räpr r\xe4pr |
填充和对齐字符串
默认情况下,将值格式化为仅表示内容所需的字符。但是,也可以将值填充到特定的长度。
不幸的是,新旧格式化风格之间的默认对齐方式有所不同。旧风格的默认为右对齐,而新风格的则为左对齐。
右对齐:
Old | '%10s' % ('test',) |
New | '{:>10}'.format('test') |
Output | test |