Python输出格式全总结
输入输出
有几种方法可以显示程序的输出;数据可以以人类可读的形式打印出来,或者写入文件以供将来使用。本章将讨论一些可能性。
更漂亮的输出格式
到目前为止,我们遇到了两种写入值的方法:表达式语句和print()函数。(第三种是使用文件对象的write()方法;标准输出文件可以作为sys.stdout引用。)
通常,你需要更多地控制输出的格式,而不仅仅是打印空格分隔的值。有几种格式化输出的方法。
要使用 格式字字符串字面值 ,请在字符串的开始引号或三引号之前加上一个f或F。在此字符串中,你可以在{和}字符之间写可以引用的变量或字面值的 Python 表达式。
字符串的 str.format() 方法需要更多的手动操作。你仍将使用 { 和 } 来标记变量将被替换的位置,并且可以提供详细的格式化指令,但你还需要提供要格式化的信息。
最后,你可以使用字符串切片和连接操作自己完成所有的字符串处理,以创建你可以想象的任何布局。字符串类型有一些方法可以执行将字符串填充到给定列宽的有用操作。
当你不需要花哨的输出而只是想快速显示某些变量以进行调试时,可以使用repr()orstr()函数将任何值转化为字符串。
str()函数是用于返回人类可读的值的表示,而repr()是用于生成解释器可读的表示(如果没有等效的语法,则会强制执行SyntaxError)对于没有人类可读性的表示的对象,str()将返回和repr()一样的值。很多值使用任一函数都具有相同的表示,比如数字或类似列表和python字典的结构。特殊的是字符串有两个不同的表示。
几个例子:
string模块包含一个Template类,它提供了另一种将值替换为字符串的方法,使用类似$x的占位符并用字典中的值替换它们,但对格式的控制要少的多。
格式化字符串文字
格式化字符串字面值 (常简称为 f-字符串)能让你在字符串前加上f和F并将表达式写成{expression}来在字符串中包含 Python 表达式的值。
可选的格式说明符可以跟在表达式后面。这样可以更好地控制值的格式化方式。以下示例将pi舍入到小数点后三位:
在 ':' 后传递一个整数可以让该字段成为最小字符宽度。这在使列对齐时很有用。:
其他的修饰符可用于在格式化之前转化值。 '!a' 应用 ascii() ,'!s' 应用 str(),还有 '!r' 应用 repr():
有关这些格式规范的参考,请参阅参考指南 Format Specification Mini-Language。
字符串的 format() 方法
str.format()方法的基本用法如下所示:
花括号和其中的字符(称为格式字段)将替换为传递给 str.format() 方法的对象。花括号中的数字可用来表示传递给 str.format() 方法的对象的位置。
如果在 str.format() 方法中使用关键字参数,则使用参数的名称引用它们的值。:
位置和关键字参数可以任意组合:
如果你有一个非常长的格式字符串,你不想把它拆开,那么你最好按名称而不是位置引用变量来进行格式化。这可以通过简单地传递字典和使用方括号 '[]' 访问键来完成:
这也可以通过使用 '**' 符号将表作为关键字参数传递。:
这在与内置函数vars()结合使用时非常有用,它会返回包含所有局部变量的字典。
例如,下面几行代码生成一组整齐的列,其中包含给定的整数和它的平方以及立方:
关于使用str.format()进行字符串格式化的完整概述,请参阅 Format String Syntax 。
手动格式化字符串
这是同一个平方和立方的表,手动格式化的:
(注意每列之间的一个空格是通过使用print()的方式添加的:它总是在其参数间添加空格。)
字符串对象的str.rjust()方法通过在左侧填充空格来对给定宽度的字段中的字符串进行右对齐。类似的方法还有str.ljust()和str.center()。这些方法不会写入任何东西,它们只是返回一个新的字符串,如果输入的字符串太长,它们不会截断字符串,而是原样返回;这虽然会弄乱你的列布局,但这通常比另一种方法好,后者会在显示值时可能不准确(如果你真的想截断,你可以添加一个切片操作,例如x.ljust(n)[:n]。)
还有另外一个方法,str.zfill(),它会在数字字符串的左边填充零。它能识别正负号:
旧的字符串格式化方法
%操作符也可以用作字符串格式化。它将左边的参数解释为一个很像sprintf()风格 的格式字符串,应用到右边的参数,并返回一个由此格式化操作产生的字符串。例如: