#format()的(槽){}是从0开始的
>>> '{0} love {1}'.format('I','you')
'I love you'
>>> '{1} love {0}'.format('I','you')
'you love I'
>>> '{-1} love {0}'.format('I','you')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
'{-1} love {0}'.format('I','you')
KeyError: '-1'
#format()的{}(槽)出现次数和format()方法中出数量不一致,则必须在槽中用序号指定参数使用
>>> '{} love {}'.format('I')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
'{} love {}'.format('I')
IndexError: tuple index out of range
>>> '{0} love {0}'.format('I')
'I love I'
#format()的(槽){(引导符):(填充)(对齐)(width)(,(千元分隔符))(.(精度))(类型)}格式控制
>>> a = '我正在学习Python!'
>>> '{:15}'.format(a) #默认左对齐
'我正在学习Python! '
>>> a
'我正在学习Python!'
>>> '{:1}'.format(a) #指定宽读为1
'我正在学习Python!'
>>> '{:<30}'.format(a) #左对齐30宽度
'我正在学习Python! '
>>> '{:>30}'.format(a) #右对齐30宽度
' 我正在学习Python!'
>>> '{:^30}'.format(a) #居中对齐30宽度
' 我正在学习Python! '
>>> '{:=^30}'.format(a) #填充=并居中对齐30宽度
'=========我正在学习Python!========='
#format()的{}(槽)一定要按顺序是:(填充)(对齐)(宽度)(,(千元分隔符))(.(精度))(类型)
>>> '{:=30}'.format(a)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
'{:=30}'.format(a)
ValueError: '=' alignment not allowed in string format specifier #'='在字符串格式说明符中不允许对齐
#format()的格式控制标记可以用变量表示,则用槽{}来指定所对应的控制标记及数量
>>> a = '我正在学习Python!'
>>> x = '#'
>>> y = '>'
>>> w = 30
>>> '{0:{1}{2}{3}}'.format(a,x,y,w)
'##################我正在学习Python!'
>>> '{1:{0}{1}{2}}'.format(x,y,w,a) #指定显示填充和对齐
'#############################>'
>>> '{2:{0}{1}{2}}'.format(x,y,w,a) #指定显示填充和宽度
'############################30'
>>> '{3:{0}{1}{2}}'.format(x,y,w,a) #要看参数的顺序,才指定参数的序号
'##################我正在学习Python!'
>>> '{1:{1}{2}{3}}'.format(a,x,y,w) #指定显示填充
'##############################'
>>> '{2:{1}{2}{3}}'.format(a,x,y,w) #指定显示填充和对齐
'#############################>'
>>> '{3:{1}{2}{3}}'.format(a,x,y,w) #指定显示填充和宽度
'############################30'
>>> '{0:{1}{2}{3}}'.format(a,x,y,w) #指定显示所有参数
'##################我正在学习Python!'
#不能从自动字段编号切换到手动字段规范
>>> '{:{1}{2}{3}}'.format(a,x,y,w)
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
'{:{1}{2}{3}}'.format(a,x,y,w)
ValueError: cannot switch from automatic field numbering to manual field specification
#format()的千位分隔符控制格式
>>> a = 12345678
>>> '{:~^20}'.format(a)
'~~~~~~12345678~~~~~~'
>>> '{:~^20,}'.format(a)
'~~~~~12,345,678~~~~~'
#format()的精度和类型控制格式
>>> '{:.2f}'.format(a)
'123.46'
>>> '{:.1f}'.format(a)
'123.5'
#格式说明符缺少精度
>>> '{:.f}'.format(a)
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
'{:.f}'.format(a)
ValueError: Format specifier missing precision
>>> '{:~^20.3f}'.format(a)
'~~~~~~123.457~~~~~~~'
#format()所有的控制格式
>>> '{:~^20,.2f}'.format(a)
'~~~~~~1,234.57~~~~~~'
>>> '{:~^20,.3f}'.format(a)
'~~~~~1,234.568~~~~~~'
#format()对str(字符串)的精度控制格式,即对字符串数量的控制
>>> a = '我在学习Python!'
>>> '{:.10}'.format(a)
'我在学习Python'
>>> '{:.5}'.format(a)
'我在学习P'
#整数类型格式化
>>> '二进制:{0:b},八进制:{0:o},十进制:{0:d},小写十六进制:{0:x},大写十六进制:{0:X},Unicode字符:{0:c}'.format(0x1c8)
'二进制:111001000,八进制:710,十进制:456,小写十六进制:1c8,大写十六进制:1C8,Unicode字符:Lj'
#浮点数的格式化
>>> '小写字母e的指数{0:e},大写字母E的指数{0:E},标准浮点{0:f},百分比{0:%}'.format(1.25)
'小写字母e的指数1.250000e+00,大写字母E的指数1.250000E+00,标准浮点1.250000,百分比125.000000%'