# 输出格式控制

# 一、基本使用格式

"模板字符串".format(<逗号分隔的参数>)
"今天是{}年{}月{}日".format("2022","3",17) #数字加不加引号都可以,字符串需要加
今天是2022317
#槽中带序号:
"今天是{2}年{1}月{0}日".format(2022,3,17)
今天是1732022

模板字符串由一系列槽”{}“组成,参数会按照序号关系替换到槽中,如果没有序号,就按照出现顺序替换。

# 二、.format​格式控制

槽除了包括参数序号,还可以包括格式控制信息:

#槽的内部格式:
{ <参数序号或参数名(f-string)> : <格式控制标记> }
#例如
{:_>30}		# 30宽度右对齐_填充

格式控制标记用来控制参数显示时的格式:

格式控制标记包括<填充>、<对齐>、<宽度>、<,>、<.精度>、<类型>6个字段,都是可选的,可以组合使用

# 1.<填充>、<对齐>、<宽度>

<填充>、<对齐>、<宽度>是3个相关字段,经常一起使用

<填充>指宽度内除了参数外的字符采用什么方式表示,默认采用空格。

<对齐>指参数在宽度内输出时的对齐方式,分别使用< 、> 、^ 表示左对齐、右对齐、居中,默认左对齐。

<宽度>指当前槽的设定输出字符的宽度,

如果该槽对应的format()参数长度比<宽度>设定值大,使用参数实际长度。

如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。

#宽度
str = "HELLO"
print('{0:30}end'.format(str))  

0是参数序号,也就是把第一个参数str替换进去,只有一个参数可以省略
30是宽度,HELLO实际位数小于指定宽度,位数将被默认以空格字符补充

#输出
HELLO                         end   #默认左对齐  end不在槽内,不服从对齐
#对齐
str = "HELLO"
print('{:>30}'.format(str))             #右对齐
                         HELLO 
#填充
str = "HELLO"
print('{0:*^30}'.format(str))    #居中且使用*填充
************HELLO*************
#参数长度比<宽度>设定值大,使用参数实际长度
str = "HELLO"
print('{:3}'.format(str))   宽度设定为3,但参数HELLO实际长度大于3,使用参数实际长度
HELLO

# 2.<精度>

精度表示两个含义,由小数点(.)开头:

对于浮点数,精度表示小数部分输出的有效位数

对于字符串,精度表示输出的最大长度

print('{:.2f}'.format(123.4567))
123.46

print('{:X^30.2f}'.format(123.4567))
XXXXXXXXXXXX123.46XXXXXXXXXXXX
str = "HELLO"
print('{:.3}'.format(str))
HEL

# 自定义类的格式控制

__format__

# f-string​输出格式控制

如果是使用的f-string的话,直接将.format格式中的序号位置改为变量或表达式即可。

例如:

name = "Alice"
age = 25
height = 1.65

print(f"Name: {name}")
print(f"Age: {age:02}")
print(f"Height: {height:.2f}m")
print(f"Name: {name:<10} Age: {age:>5}")
print(f"Number: {25:06}")
print(f"Hex: {255:x}")

"""
Name: Alice
Age: 25
Height: 1.65m
Name: Alice      Age:    25
Number: 000025
Hex: ff
"""