7.1. 更漂亮的输出格式

到目前为止,我们遇到了两种写入值的方法:表达式语句print() 函数。(第三种是使用文件对象的 write() 方法;标准输出文件可以作为 sys.stdout 引用。更多相关信息可参考标准库指南。)

通常,你需要更多地控制输出的格式,而不仅仅是打印空格分隔的值。有几种格式化输出的方法。

  • 要使用 格式化字符串字面值 ,请在字符串的开始引号或三引号之前加上一个 fF 。在此字符串中,你可以在 {} 字符之间写可以引用的变量或字面值的 Python 表达式。

    1. >>> year = 2016
    2. >>> event = 'Referendum'
    3. >>> f'Results of the {year} {event}'
    4. 'Results of the 2016 Referendum'
  • 字符串的 str.format() 方法需要更多的手动操作。你仍将使用 {} 来标记变量将被替换的位置,并且可以提供详细的格式化指令,但你还需要提供要格式化的信息。

    1. >>> yes_votes = 42_572_654
    2. >>> no_votes = 43_132_495
    3. >>> percentage = yes_votes / (yes_votes + no_votes)
    4. >>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
    5. ' 42572654 YES votes 49.67%'
  • 最后,你可以使用字符串切片和连接操作自己完成所有的字符串处理,以创建你可以想象的任何布局。字符串类型有一些方法可以执行将字符串填充到给定列宽的有用操作。

当你不需要花哨的输出而只是想快速显示某些变量以进行调试时,可以使用 repr() or str() 函数将任何值转化为字符串。

str() 函数是用于返回人类可读的值的表示,而 repr() 是用于生成解释器可读的表示(如果没有等效的语法,则会强制执行 SyntaxError)对于没有人类可读性的表示的对象, str() 将返回和 repr() 一样的值。很多值使用任一函数都具有相同的表示,比如数字或类似列表和字典的结构。特殊的是字符串有两个不同的表示。

几个例子:

  1. >>> s = 'Hello, world.'
  2. >>> str(s)
  3. 'Hello, world.'
  4. >>> repr(s)
  5. "'Hello, world.'"
  6. >>> str(1/7)
  7. '0.14285714285714285'
  8. >>> x = 10 * 3.25
  9. >>> y = 200 * 200
  10. >>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
  11. >>> print(s)
  12. The value of x is 32.5, and y is 40000...
  13. >>> # The repr() of a string adds string quotes and backslashes:
  14. ... hello = 'hello, world\n'
  15. >>> hellos = repr(hello)
  16. >>> print(hellos)
  17. 'hello, world\n'
  18. >>> # The argument to repr() may be any Python object:
  19. ... repr((x, y, ('spam', 'eggs')))
  20. "(32.5, 40000, ('spam', 'eggs'))"

string 模块包含一个 Template 类,它提供了另一种将值替换为字符串的方法,使用类似 $x 的占位符并用字典中的值替换它们,但对格式的控制要少的多。