一、概览
自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数以大括号{}来标明被替换的字符串,通过{}和:来代替之前的%,从而快速处理各种字符串。
二、格式
1、语法格式
str.format():str是指字符串实例对象,常用格式为:‘ ’.format()。
2、参数格式
‘{[index][:[fill]align][sign][#][width][.precision][type]}{......}{......}’.format(),格式中[]内的参数都是可选参数,每个{}都表示是一个待替换的字符串。
index:指定冒号后面出现的参数在format()中的索引值,如果没有,则以format()中的默认顺序自动分配。
fill:指定空白处的填充符。
align:指定数字的对齐方式。
align | 含义 |
---|---|
< | 左对齐,对于大部分对象时为默认 |
> | 右对齐,对于数字时为默认 |
= | 数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效 |
^ | 数据居中,此选项需和 width 参数一起使用 |
sign:指定有无符号数 。
sign | 含义 |
---|---|
+ | 正数前面添加 ‘ + ’ ,负数前面加 ‘ - ’ |
- | 正数前面不添加 ‘ + ’ ,负数前面加 ‘ - ’ |
space | 正数前面添加 ‘ 空格 ’ ,负数前面加 ‘ - ’ |
# | 对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀 |
width:指定输出数据时所占的宽度。
.precision:如果后面存在type参数,则指的是保留小数的位数,如果type参数不存在,则是指有效数字的位数。
type:指定输出数据的具体类型。
type | 含义 |
---|---|
s | 对字符串类型格式化 |
% | 显示百分比,默认显示小数点后六位 |
d | 十进制整数 |
c | 将十进制整数自动转化成对应的Unicode字符 |
b | 将十进制数自动转化成二进制数,并格式化输出 |
o | 将十进制数自动转化成八进制数,并格式化输出 |
x、X | 将十进制数自动转化成十六进制数,并格式化输出 |
e、E | 转化成科学计数法,并格式化输出 |
f、F | 转化为浮点数,默认保留六位小数,并格式化输出 |
g、G | 自适应转化为e或f(E或F),并格式化输出 |
三、基本用法
1、按照顺序依次匹配参数。
format括号中的字符串可多不可少
print("my name is {},i am {} years old,my weight is {}.".format("Tom",8,"80kg"))
#my name is Tom,i am 8 years old,my weight is 80kg.
2、按照索引匹配参数。
print("my name is {0},i am {1} years old,i love {0}.".format("Tom",8))
#my name is Tom,i am 8 years old,i love Tom.
3、按照参数名匹配参数。
name='Tom'
age=8
#以f开头表示在字符串中支持大括号内的python表达式
print(f"my name is {name},i am {age} years old,i love {name}.")
#my name is Tom,i am 8 years old,i love Tom.
print("my name is {names},i am {age} years old,i love {names}.".format(names=name,age=10))
#my name is Tom,i am 10 years old,i love Tom.
4、混合使用
需要注意,混合使用时,命名参数必须写道最后。索引和顺序匹配不可混合使用。
print("my name is {name},i am {} years old,i love {name}.".format(10,"Tom",8,name='Peter'))
#my name is Peter,i am 10 years old,i love Peter.
print("my name is {name},i am {2} years old,i love {name}.".format(10,"Tom",8,name='Peter'))
#my name is Peter,i am 8 years old,i love Peter.
四、进阶用法
1、通过列表匹配参数
通过列表索引和参数索引进行匹配。在format格式化时,可使用*将list拆分为多个元素。
b=['Tom','Peter']
c=[8,10]
#两种方式实现列表参数传递
print("my name is {a[0]}, i love {a[1]}, we are {d[1]} years old.".format(a=b,d=c))
print("my name is {0[0]}, i love {0[1]}, we are {1[1]} years old.".format(b,c))
print("my name is {0}, i love {1}, we are {3} years old.".format(*b,*c))
#一样的结果:my name is Tom, i love Peter, we are 10 years old.
2、通过字典匹配参数
通过key进行匹配。在format格式化时,可使用**将dict拆分为多个键值对。
dic={'name':'Tom','age':8,'fruit':'apple'}
print("my name is {e[name]},i love {e[fruit]}.".format(e=dic))
print("my name is {0[name]},i love {0[fruit]}.".format(dic))
print("my name is {name},i love {fruit}.".format(**dic))
#结果:my name is Tom,i love apple.
3、通过类属性匹配参数
class Test:
m='Tom'
n='apple'
print("my name is {t.m}, i love {t.n}.".format(t=Test))
print("my name is {0.m}, i love {0.n}.".format(Test))
#结果:my name is Tom, i love apple.
五、格式化字符串
1、字符串左对齐
print("{:<}!".format("hello word")) #左对齐
print("{:<20}!".format("hello word")) #左对齐,宽度20,默认填充空格,<可省略
print("{:0<20}!".format("hello word")) #左对齐,宽度20,填充0
print("{:*<20}!".format("hello word")) #左对齐,宽度20,填充*
'''
hello word!
hello word !
hello word0000000000!
hello word**********!
'''
2、字符串右对齐
print("{:>}!".format("hello word")) #右对齐
print("{:>20}!".format("hello word")) #右对齐,宽度20,默认填充空格
print("{:0>20}!".format("hello word")) #右对齐,宽度20,填充0
print("{:*>20}!".format("hello word")) #右对齐,宽度20,填充*
'''
hello word!
hello word!
0000000000hello word!
**********hello word!
'''
3、字符串居中对齐
print("{:^}!".format("hello word")) #居中对齐
print("{:^20}!".format("hello word")) #居中对齐,宽度20,默认填充空格
print("{:0^20}!".format("hello word")) #居中对齐,宽度20,填充0
print("{:*^20}!".format("hello word")) #居中对齐,宽度20,填充*
'''
hello word!
hello word !
00000hello word00000!
*****hello word*****!
'''
4、混合使用
print("诗句:{0:Ω^10},\n诗句:{1:*<10}。\n诗句:{2:*>10},\n诗句:{3:■^10}。".format("墙角数枝梅","凌寒独自开","遥知不是雪","为有暗香来"))
'''
诗句:ΩΩ墙角数枝梅ΩΩΩ,
诗句:凌寒独自开*****。
诗句:*****遥知不是雪,
诗句:■■为有暗香来■■■。
'''
5、处理数字格式
#浮点数小数部分处理
print("π保留四位小数:{:.4f}".format(3.1415926)) #π保留四位小数:3.1416
#字符串截取
print("取字符串前四位:{:.4}".format('hello')) #取字符串前四位:hell
#给数字加千位符
print("给数字加千位符:{:,}".format(646545314)) #给数字加千位符:646,545,314
#十进制转化为二进制
print("二进制转化:{:#b}".format(16)) #二进制转化:0b10000
#十进制转化为八进制
print("八进制转化:{:#o}".format(16)) #八进制转化:0o20
#十进制转化为十六进制
print("十六进制转化:{:#x}".format(16)) #十六进制转化:0x10
#使用=使数字右对齐
print("数字右对齐:{:*=10}".format(16)) #数字右对齐:********16
#混合处理
print("参数π:{1:■^+20.2%}".format(3,3.1415926)) #参数π:■■■■■■+314.16%■■■■■■
六、应用
绘制居中对齐的图案
for i in range(1,21,2):
print("{:^20}".format("*"*i))
'''
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
'''