【Python】输出格式化:关于format函数

语法格式

<模板字符串>.format(<逗号分隔的参数>)
槽中格式控制标记 .
引导符号
<填充> 用于填充的单个字符
<对齐> <左对齐;>右对齐;^居中对齐
<宽度> 槽的设定输出宽度
<,> 数字的千分位分隔符,适用于整数和浮点数
<.精度> 浮点数小数部分的精度,或字符串的最大输出长度
<类型> 整数类型 b/c/d/o/x/X;浮点数类型e/E/f/%(具体戳这里 > 类型格式设置)

使用多个标记是的排列顺序也是按这个表的顺序。

填充&对齐&宽度

三者经常是配合起来使用的,有设置填充样式是一定要设置对齐方式否则会报错

>>> print("{:-^20}".format("哈哈")) #一个汉字=一个字符
---------哈哈---------
>>> print("{:->20}".format("哈哈"))
------------------哈哈
>>> print("{:-<20}".format("哈哈"))
哈哈------------------

关于设置宽度后的默认对齐方式:

>>> "{:20}".format(12345678)
'            12345678'
>>> "{:20}".format("哈哈")
'哈哈                  '
# 没有看到官方说明,但是试了一下应该是数字默认右对齐 字符串默认左对齐

无意中发现等号也可以有右对齐效果(format的参数是数字时):

>>> print("{:*=20,}".format(123456789))
*********123,456,789
>>> print("{:*=20}".format(123456789))
***********123456789
>>> "{:=20}".format(123456789)
'           123456789'

千位分隔符

数字还可以加千位分隔符效果:

>>> print("{:,}".format(12345678))
12,345,678
>>> print("{:,}".format(123456.78))
123,456.78
>>> print("{:*^20,}".format(12345678))
*****12,345,678*****
>>> print("{:*>20,}".format(12345678))
*********12,345,678
>>> print("{:*<20,}".format(12345678))
12,345,678**********

之前蠢得死不知道python输出本身有格式模板结果千分位分隔符的输出自己生写的,其实一句话就可以写完:

n = input("输入一个整数:")
if len(n) > 3:
    cut=len(n)//3-(len(n)%3==0)*1
else:
    cut = 0

head = len(n) - cut*3;

new = n[0:head]
for i in range(cut):
    new = new + "," + n[head:head+3];
    head = head+3;

print("{0:->20}".format(new))

# 一句话概括:print("{:->20,}".format(eval(input("输入一个整数:"))))

精度

设置浮点数精度(设置精度一定要设置浮点数类型):

>>> "{:.4f}".format(123)
'123.0000'
>>> "{:.4e}".format(123)
'1.2300e+02'
>>> "{:=^10.4f}".format(123)
'=123.0000='

# 两个报错
>>> "{:.4x}".format(123)
Traceback (most recent call last):
  File "", line 1, in <module>
    "{:.4x}".format(123)
ValueError: Precision not allowed in integer format specifier
>>> "{:=^10.4}".format(123)
Traceback (most recent call last):
  File "", line 1, in <module>
    "{:=^10.4}".format(123)
ValueError: Precision not allowed in integer format specifier

限制字符串输出长度:

>>> "{:=^10.4}".format("hahahahahahahahaha")
'===haha==='
>>> "{:=^10.4}".format("哈哈哈哈哈哈哈哈哈")
'===哈哈哈哈==='

类型

类型格式设置

字符 含义
整数
b binary。输出整数的二进制形式。
o octal。输出整数的八进制形式。
d decimal。输出整数的十进制形式。
x hexademical。输出整数的小写十六进制形式。
X hexademical。输出整数的大写十六进制形式。
c charactor。输出整数对应的Unicode字符。
浮点数 * 这一类的格式字符好像和千分位分隔符冲突
e 幂形式(科学计数法)。输出浮点数的小写字母e的指数形式。例子: 1.03 e + 08 = 1.03 ∗ 1 0 8 1.03e+08 = 1.03*10^8 1.03e+08=1.03108
E 幂形式(科学计数法)。输出浮点数的大写字母e的指数形式。
f float。输出浮点数的标准浮点形式(六位小数)。
% 百分数。将数值乘以100然后以’f’格式打印,值后面会有一个百分号。
其他
g general。输出其固定有效数字位数(可以设置,格式和设置精度一样,默认是六位)的小数形式,
数字过大(数字本身有效数字位数大于设置的有效数字位数)则用幂形式显示。
n number。基本和’g’相同。不同的是它会根据区域设置插入数字分隔符。

不同进制:

>>> print("默认{0}  二进制{0:b}  八进制{0:o}  十进制{0:d}  小写十六进制{0:x}  大写十六进制{0:X}".format(0b1111))
默认15  二进制1111  八进制17  十进制15  小写十六进制f  大写十六进制F
>>> print("默认{0}  二进制{0:b}  八进制{0:o}  十进制{0:d}  小写十六进制{0:x}  大写十六进制{0:X}".format(0o15))
默认13  二进制1101  八进制15  十进制13  小写十六进制d  大写十六进制D
>>> print("默认{0}  二进制{0:b}  八进制{0:o}  十进制{0:d}  小写十六进制{0:x}  大写十六进制{0:X}".format(15))
默认15  二进制1111  八进制17  十进制15  小写十六进制f  大写十六进制F
>>> print("默认{0}  二进制{0:b}  八进制{0:o}  十进制{0:d}  小写十六进制{0:x}  大写十六进制{0:X}".format(0x15))
默认21  二进制10101  八进制25  十进制21  小写十六进制15  大写十六进制15

Unicode:>Unicode 编码表

>>> "{:c}".format(58)
':'

浮点数:

>>> print("小写幂形式{0:e}  大写幂形式{0:E}  标准浮点形式{0:f}  百分数{0:%}".format(0.745))
小写幂形式7.450000e-01  大写幂形式7.450000E-01  标准浮点形式0.745000  百分数74.500000%
>>> print("{0:.2e} = {0:.2%}".format(0.745))
7.45e-01 = 74.50%
>>> print("{:f,}".format(123456))
Traceback (most recent call last):
  File "", line 1, in <module>
    print("{:f,}".format(123456))
ValueError: Invalid format specifier

'g’大致上就是用于设置有效数字位数:
注意一下这里数字原本有效数字位数小于指定的有效数字位数时没有补零(第一行和第七行)

>>> "{:g}".format(12345)'12345'
>>> "{:g}".format(123456789)
'1.23457e+08'
>>> "{:.3g}".format(123456789)
'1.23e+08'
>>> "{:.12g}".format(12.3456789)'12.3456789'

显示符号

>>> "{}".format(-1)
'-1'
>>> "{}".format(+1)
'1'
>>> "{:+}".format(+1)
'+1'
>>> "{:+20.3f}".format(1234567)
'        +1234567.000'

# 两个报错
>>> "{:+=>20.3f}".format(1234567) 
Traceback (most recent call last):
  File "", line 1, in <module>
    "{:+=>20.3f}".format(1234567)
ValueError: Invalid format specifier
>>> "{:+*>20.3f}".format(1234567)
Traceback (most recent call last):
  File "", line 1, in <module>
    "{:+*>20.3f}".format(1234567)
ValueError: Invalid format specifier

# 所以可以得出:同时设置正负号和符号填充是不可以的,但是可以这样 ↓
>>> "{:=>20}".format("{:+.3f}".format(1234567))
'========+1234567.000'

你可能感兴趣的:(Python)