7.1.2. 字符串的 format() 方法

str.format() 方法的基本用法如下所示:

  1. >>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
  2. We are the knights who say "Ni!"

花括号和其中的字符(称为格式字段)将替换为传递给 str.format() 方法的对象。花括号中的数字可用来表示传递给 str.format() 方法的对象的位置。

  1. >>> print('{0} and {1}'.format('spam', 'eggs'))
  2. spam and eggs
  3. >>> print('{1} and {0}'.format('spam', 'eggs'))
  4. eggs and spam

如果在 str.format() 方法中使用关键字参数,则使用参数的名称引用它们的值。:

  1. >>> print('This {food} is {adjective}.'.format(
  2. ... food='spam', adjective='absolutely horrible'))
  3. This spam is absolutely horrible.

位置和关键字参数可以任意组合:

  1. >>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
  2. other='Georg'))
  3. The story of Bill, Manfred, and Georg.

如果你有一个非常长的格式字符串,你不想把它拆开,那么你最好是按名称而不是按位置引用变量来进行格式化。 这可以通过简单地传递字典并使用方括号 '[]' 访问键来完成。

  1. >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
  2. >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
  3. ... 'Dcab: {0[Dcab]:d}'.format(table))
  4. Jack: 4098; Sjoerd: 4127; Dcab: 8637678

这也可以通过使用 ‘**’ 符号将 table 作为关键字参数传递。

  1. >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
  2. >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
  3. Jack: 4098; Sjoerd: 4127; Dcab: 8637678

这在与内置函数 vars() 结合使用时非常有用,它会返回包含所有局部变量的字典。

例如,下面几行代码生成一组整齐的列,其中包含给定的整数和它的平方以及立方:

  1. >>> for x in range(1, 11):
  2. ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
  3. ...
  4. 1 1 1
  5. 2 4 8
  6. 3 9 27
  7. 4 16 64
  8. 5 25 125
  9. 6 36 216
  10. 7 49 343
  11. 8 64 512
  12. 9 81 729
  13. 10 100 1000

关于使用 str.format() 进行字符串格式化的完整概述,请参阅 格式字符串语法