python format()
函数返回一个格式化的字符串。
语法
str.format(*args, **kwargs)
语法1:[模板字符串].format(逗号分隔的参数) 或者
语法2:{参数序号:格式控制标记}.format(逗号分隔的参数)
- 它是通过{}和:来代替%。
- 模板字符串是一个由槽(用大括号{}来表示)和字符串组成的字符串,用来控制字符串的显示效果。
- 大括号{}对应着format()中逗号分隔的参数。
返回值
返回一个格式化的字符串。
下面介绍format()函数基本用法
语法1
语法:[模板字符串].format(逗号分隔的参数)
程序示例:
#!/usr/bin/python
# coding=utf-8
print("用法一:")
print("一日之计在于{}".format("晨"))
#如果模板字符串有多个槽{},并且槽内没有指定的序号,则按照槽{}出现的顺序一一对应format()函数中的不同参数
print("用法二:")
print("{}之计在于{}".format("一日","晨"))
#也可以通过在槽{}中指定format()函数中参数的序号来使用,参数是从0开始编号的。
print("用法三:")
print("{0}之计在于{1}".format("一日","晨"))
print("{1}之计在于{0}".format("晨","一日"))
# 如果想要在模板字符串中输出大括号("{}"),则使用{{ 来表示 { 用 }} 来表示 }
print("用法四:")
print("{0}说得好:{{一{1}之计在于晨 一{2}之计在于春}}".format("俗话","日","年"))
#如果模板字符串中出现的槽{}和format()函数中参数个数不一致,
#则必须要在槽{}中使用序号来指定参数的使用,否者会产生IndexError的错误。
print("用法五:")
print("{0}日之计在于晨, {0}年之计在于春".format("一"))
print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。
程序运行结果:
用法一:
一日之计在于晨
用法二:
一日之计在于晨
用法三:
一日之计在于晨
一日之计在于晨
用法四:
俗话说得好:{一日之计在于晨 一年之计在于春}
用法五:
一日之计在于晨, 一年之计在于春
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-20-5f7b4f063a3b> in <module>()
19 print("用法五:")
20 print("{0}日之计在于晨, {0}年之计在于春".format("一"))
---> 21 print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。
IndexError: tuple index out of range
一日之计在于晨
用法二:
一日之计在于晨
用法三:
一日之计在于晨
一日之计在于晨
用法四:
俗话说得好:{一日之计在于晨 一年之计在于春}
用法五:
一日之计在于晨, 一年之计在于春
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-20-5f7b4f063a3b> in <module>()
19 print("用法五:")
20 print("{0}日之计在于晨, {0}年之计在于春".format("一"))
---> 21 print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。
IndexError: tuple index out of range
通过关键字参数
程序示例:
#!/usr/bin/python
# coding=utf-8
print("{year}之计在于{season}".format(year="一年",season="春"))
程序运行结果:
一年之计在于春
通过列表
程序示例:
#!/usr/bin/python
# coding=utf-8
l = ["一日","晨","一年","春"]
a = ["一日","晨"]
b = ["一年","春"]
print("{0[0]}之计在于{0[1]}, {0[2]}之计在于{0[3]}".format(l))
#format()函数中的参数可以是一个或多个列表,但要注意槽中序号的差异。
print("{0[0]}之计在于{0[1]}, {1[0]}之计在于{1[1]}".format(a,b))
程序运行结果:
一日之计在于晨, 一年之计在于春
一日之计在于晨, 一年之计在于春
一日之计在于晨, 一年之计在于春
通过字典
程序示例:
#!/usr/bin/python
# coding=utf-8
d1 = {"year":"一年","season":"春"}
print(" {year}之计在于{season}".format(**d1))
d2 = {"time":["一日","一年"],"season":["晨","春"]}
print("{time[0]}之计在于{season[0]},{time[1]}之计在于{season[1]}".format(**d2))
程序运行结果:
一年之计在于春
一日之计在于晨,一年之计在于春
一日之计在于晨,一年之计在于春
语法2
语法:{参数序号:格式控制标记}.format(逗号分隔的参数)
: | [填充] | [对齐] | [宽度] | [,] | [.精度] | [类型] |
---|---|---|---|---|---|---|
引导符号 | 要填充的单个字符 | < 左对齐 > 右对齐 ^ 居中对齐 | 设定槽的输出宽度 | 数字的千位分隔符 适用于整数和浮点数
| 用于控制浮点数小数部分 的精度(长度) 或字符串的最大输出长度 | 整数类型:b,c,d,o,x,X 浮点数类型:e,E,f,% |
[填充]——只能填充单个字符。填充字符时,一定要选择对齐方式,否者会有 Invalid format specifier 的报错
[对齐]——默认对齐方式为左对齐。
[宽度]——指的是槽的输出宽度,当槽的实际宽度比槽的设定宽度大,则输出槽的实际宽度,否者按设定的宽度输出。
[类型]——解析如下表:
类型 | 描述 | 类型 | 描述 |
b | 输出整数的二进制形式 | e | 输出浮点数对应的小写字母e的指数形式 |
c | 输出整数对应的Unicode字符 | E | 输出浮点数对应的大写字母E的指数形式 |
d | 输出整数的十进制形式 | f | 输出标准浮点数形式 |
o | 输出整数的八进制形式 | % | 输出浮点数的百分比形式 |
x | 输出整数的小写十六进制形式 | ||
X | 输出整数的大写写十六进制形式 |
格式控制标记规则:[填充], [对齐], [宽度], [,], [.精度], [类型] 这六个规则是可以任意组合使用的,但要按以上顺序使用。不过一般可以分为两组。
一组为:[填充] [对齐] [宽度] 主要用于规范字符串的显示格式。
程序示例:
#!/usr/bin/python
# coding=utf-8
s = "厉害了,我的国"
print("{0:30}".format(s)) #默认为左对齐,宽度为30,序号0可省
print("{0:>30}".format(s)) #右对齐
print("{0:*>30}".format(s)) #填充*字符,右对齐
print("{0:*^30}".format(s)) #居中对齐
print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid format specifier 的报错
程序运行结果:
厉害了,我的国
厉害了,我的国
***********************厉害了,我的国
***********厉害了,我的国************
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-86-959132fb938a> in <module>()
4 print("{0:*>30}".format(s)) #填充*字符,右对齐
5 print("{0:*^30}".format(s)) #居中对齐
----> 6 print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid format specifier 的报错
ValueError: Invalid format specifier
厉害了,我的国
***********************厉害了,我的国
***********厉害了,我的国************
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-86-959132fb938a> in <module>()
4 print("{0:*>30}".format(s)) #填充*字符,右对齐
5 print("{0:*^30}".format(s)) #居中对齐
----> 6 print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid format specifier 的报错
ValueError: Invalid format specifier
格式控制标记规则也可以用变量来表示,即用槽{}来指定对应的格式控制标记规则。
程序示例:
#!/usr/bin/python
# coding=utf-8
s = "厉害了,我的国"
a = "*"
b = "^"
c = 30
d = ["<","^",">"]
print("{0:{1}{2}{3}}".format(s,a,b,c)) #居中对齐,宽度为30,填充字符为*
print("{0:{1}{2[2]}{3}}".format(s,a,d,c))#右对齐,用列表选择对齐方式。
print("{0:{1}{2[0]}{3}}".format(s,a,d,c))
程序运行结果:
***********厉害了,我的国************
***********************厉害了,我的国
厉害了,我的国***********************
***********************厉害了,我的国
厉害了,我的国***********************
另一组为:[,] [.精度] [类型] 主要于规范数字的输出格式和控制字符串的输出长度。
程序示例:
#!/usr/bin/python
# coding=utf-8
print("{0:,}".format(123456789)) # 千位分隔符
print("{:,.3}".format(123456.123)) #保留3为有效数字
print("{:.3}".format("厉害了,我的国")) # 输出前三个字符
#输出整数类型的格式化规则:
#print("输出整数的二进制形式:{0:b}\n输出整数对应的Unicode字符:{0:c}\n输出整数的十进制形式:{0:d}\n输出整数的八进制形式:{0:o}\n输出整数的小写十六进制形式:{0:x}\n输出整数的大写写十六进制形式:{0:X}".format(123456))
# 等效于一下语句:
print("输出整数的二进制形式: {:b}".format(123456))
print("输出整数对应的Unicode字符: {:c}".format(123456))
print("输出整数的十进制形式: {:d}".format(123456))
print("输出整数的八进制形式: {:o}".format(123456))
print("输出整数的小写十六进制形式: {:x}".format(123456))
print("输出整数的大写写十六进制形式: {:X}".format(123456))
#输出浮点数类型的格式化规则:
print("输出浮点数对应的小写字母e的指数形式: {:e}".format(123456.123456))
print("输出浮点数对应的大写字母E的指数形式: {:E}".format(123456.123456))
print("输出标准浮点数形式: {:f}".format(123456.123456))
print("输出浮点数的百分比形式: {:%}".format(123456.123456))
#对比 [.精度]可以控制小数部分的输出长度
print("输出浮点数对应的小写字母e的指数形式: {:.3e}".format(123456.123456))
print("输出浮点数对应的大写字母E的指数形式: {:.3E}".format(123456.123456))
print("输出标准浮点数形式: {:.3f}".format(123456.123456))
print("输出浮点数的百分比形式: {:.3%}".format(123456.123456))
程序运行结果:
123,456,789
1.23e+05
厉害了
输出整数的二进制形式: 11110001001000000
输出整数对应的Unicode字符: ?
输出整数的十进制形式: 123456
输出整数的八进制形式: 361100
输出整数的小写十六进制形式: 1e240
输出整数的大写写十六进制形式: 1E240
输出浮点数对应的小写字母e的指数形式: 1.234561e+05
输出浮点数对应的大写字母E的指数形式: 1.234561E+05
输出标准浮点数形式: 123456.123456
输出浮点数的百分比形式: 12345612.345600%
输出浮点数对应的小写字母e的指数形式: 1.235e+05
输出浮点数对应的大写字母E的指数形式: 1.235E+05
输出标准浮点数形式: 123456.123
输出浮点数的百分比形式: 12345612.346%
1.23e+05
厉害了
输出整数的二进制形式: 11110001001000000
输出整数对应的Unicode字符: ?
输出整数的十进制形式: 123456
输出整数的八进制形式: 361100
输出整数的小写十六进制形式: 1e240
输出整数的大写写十六进制形式: 1E240
输出浮点数对应的小写字母e的指数形式: 1.234561e+05
输出浮点数对应的大写字母E的指数形式: 1.234561E+05
输出标准浮点数形式: 123456.123456
输出浮点数的百分比形式: 12345612.345600%
输出浮点数对应的小写字母e的指数形式: 1.235e+05
输出浮点数对应的大写字母E的指数形式: 1.235E+05
输出标准浮点数形式: 123456.123
输出浮点数的百分比形式: 12345612.346%
综合运用实例
程序示例:
#!/usr/bin/python
# coding=utf-8
print("{:*^30,.2f}".format(123456.1235))#用*字符填充,居中对齐,宽度为30,千位分隔符,保留小数点后两位,输出标准浮点数
s = "一年有:"
a = 365.0000
b = "天"
print("{0:*>8}{1:,.1f}{2:*<5}".format(s,a,b))
程序运行结果:
**********123,456.12**********
****一年有:365.0天****
****一年有:365.0天****