Python 标准化输出
Document
Input and Output - formatted-string-literals | python docs
使用 f-strings
f-strings 是 Python 从 3.6 版本开始引入的一种字符串格式化方式,其全称为“格式化字符串字面量”。f-strings 使用更加简洁的语法,并且具有更高的可读性和性能。
f-strings 的语法使得可以直接在字符串中使用 {} 嵌入变量和python表达式,并允许在 : 后添加格式化字符说明。
1 | name, age, height = "zhang", 18, 1.7 |
1 | decimals = [1/deno for deno in range(1, 10)] |
语法
在冒号 : 后面加上 format specification 形如 f":format_specification" 格式,用于规范输出的格式。详细的参数如下:
1 | format_spec ::= ":[[fill]align][sign][#][0][width][,][.precision][type]" |
关于其中参数可选项的说明:
1 | fill ::= Any Character |
align 对齐方式
可选项
| 符号 | 描述 | 示例 |
|---|---|---|
| < | 左对齐 | f"{42:<5}" → 42 |
| > | 右对齐 | f"{42:>5}" → 42 |
| ^ | 居中对齐 | f"{42:^5}" → 42 |
| = | 填充符紧跟符号 | f"{-42:=+5}" → -0042 |
sign 符号
表示是否需要在数字前面加正负号+-,其中 + 只对正数和 0 有效果,对负数不起作用;负数默认会带上 - 号,所以 - 并没有额外添加的必要;空格 " " 表示在正数和 0 前面加空格,用于占位,目的是和符数的 - 对齐。
1 | print(f"{42:^}") # 42 |
width 宽度 fill 填充
宽度控制输出的最小长度,不足时用填充字符补齐。这个宽度表示当前 {...} 输出一共占多少字符,包括 . 和 % 等字符。
填充字符可以是任何 Character,不填则默认为空格。
1 | print(f"{3.14:0>8.2f}") # 00003.14 |
数字格式
数字格式化用于控制整数和浮点数的显示形式。
整数类型:
| 符号 | 描述 | 示例 |
|---|---|---|
| d | 十进制整数 | f"{42:d}" → 42 |
| b | 二进制 | f"{42:b}" → 101010 |
| o | 八进制 | f"{42:o}" → 52 |
| x | 十六进制(小写) | f"{42:x}" → 2a |
| X | 十六进制(大写) | f"{42:X}" → 2A |
| n | 本地化的十进制(带分隔符) | f"{1000:n}" → 1,000 |
浮点数类型:
| 符号 | 描述 | 示例 |
|---|---|---|
| f | 定点小数表示法 | f"{3.14159:.2f}" → 3.14 |
| e | 科学计数法,小写 e | f"{1234.567:e}" → 1.234567e+03 |
| E | 科学计数法,大写 E | f"{1234.567:E}" → 1.234567E+03 |
| g | 根据值自动选择 f 或 e | f"{0.00001:g}" → 1e-05 |
| % | 百分比表示法,自动乘以 100 | f"{0.12345:.2%}" → 12.35% |
一些示例
1 | pis = [3.1415926*i for i in range(4)] |
技巧
使用 = 号简化输出
使用 f"{var = }" 这种语法可以简化变量的输出,等价于 f"var = {var}"。其中 = 号两边加不加空格会对应到输出中。
1 | pi = 3.14 |
多行书写
1 | print(f"pi: {3.1415926}\n" |
numpy.set_printoptions
使用 numpy.set_printoptions 可以统一设置 numpy array 输出格式, 而不需要单独对每一个 array 元素进行 f-string 的格式化
1 | import numpy as np |
1 | import numpy as np |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文羊羽!