Python拥有两种字符串格式化类型%和format()
1.‘%’格式化
语法
%[(key)][flags][width].[precision]typecode
[]里的都为可选项。
key:字典的键
flags:符号可以使用' '(空格,不保留正号右对齐)、'+'(保留正号右对齐)、'-'(不保留正号左对齐)、'0'(缺位补零)。
(注:flags需要和width配合使用,用来格式化字符串的位置)
width:字符串长度(若小于原长度,则会全部输出。若大于不足为用空格补齐。)
precision:小数位精度。仅对数值型变量有效。
typecode:格式化模式。(常见的%d,%s等)
%的方法可以传实值、元组、字典等。(与c中的字符串格式化很像)
下面给出几个实例
a = "hello world"
b={'name':'jack','age':19}
c = 3.1415926
print("%(name)s is %(age)d years old and he says "%b+"%s"%a) #(key) 为字典的key
print("%+10.3f"%c) #右对齐
print('%s %s'%(a,a)) #利用元组拼接字符串
jack is 19 years old and he says hello world
+3.142
hello world hello world
2.format()格式化
语法:
[[fill]align][flags][#][0][width][,][.precision][type]
format()的使用方式是str.format(需要格式化的字符),str中{位置(不写默认为0):方式}表示格式化方式
fill:填充字符,同样需要与width连用,当填充字符不为0或者' '(空格)时需要与align连用
align:对齐方式<左对齐,>右对齐,^居中,=右对齐仅对数字有效
flags:符号,同上。
#:仅对二进制、八进制、十六进制有效,显示其前缀。
,:十进制千分位分隔符。
width、type与precision同上
下面给几个例子
a={'name':'jeffey','age':21}
b=[100,'hello']
c=5.20
d=('jack',18)
e=8000
print("{name:*>10}".format(**a)) #当传入的值得字典时需要在字典前加**
print("{1:->8}++{0}".format(*b)) #当传入列表时需要在列别前加*
print("{:010.4}".format(c)) #精度不足时仅输出有效数字
print("name is {0} and he is {1} years old".format(d[0],d[1])) #可用位置传参
print("{:#x}".format(e)) #16进制输出
****jeffey
---hello++100
00000005.2
name is jack and he is 18 years old
0x1f40