字符串格式化
含义:格式化字符串,就是按照统一的规格去输出一个字符串
种类:Python的字符串格式化有两种方式: 百分号方式、format方式
现状:百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存
1.format()
格式:[[fill]align][sign][#][0][width][,][.precision][type]
① fill (可选) 空白处填充的字符
② align (可选) 对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
^,内容居中
③ sign (可选) 有无符号数字
+,正号加正,负号加负;
-,正号不变,负号加负;
空格 ,正号空格,负号加负;
④ # (可选) 对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
⑤ , (可选) 为数字添加分隔符,如:1,000,000
⑥ width(可选) 格式化位所占宽度
⑦ .precision(可选) 小数位保留精度
⑧ type(可选) 格式化类型
~传入"字符串类型 "的参数
s,格式化字符串类型数据
空白,未指定类型,则默认是None,同s
~传入"整数类型 "的参数
b,将10进制整数自动转换成2进制表示然后格式化
c,将10进制整数自动转换为其对应的unicode字符
d,十进制整数
o,将10进制整数自动转换成8进制表示然后格式化;
x,将10进制整数自动转换成16进制表示然后格式化(小写x)
X,将10进制整数自动转换成16进制表示然后格式化(大写X)
~传入" 浮点型或小数类型 "的参数
e, 转换为科学计数法(小写e)表示,然后格式化;
E, 转换为科学计数法(大写E)表示,然后格式化;
f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
g, 自动在e和f中切换
G, 自动在E和F中切换
%,显示百分比(默认显示小数点后6位)
位置参数与关键字参数
format()方法接受位置参数和关键字参数,二者都传递给一个叫作replacement字段,这个字段在字符串内由大括号表示
举例:
>>> '{0} love {1}.{2}'.format("I","love","python")
'I love love.python'
{0},{1},{2},那么format()的三个参数就叫做关键字参数
>>> '{a} love {b}.{c}'.format(a="I",b="love",c="python")
'I love love.python'
>>>
a,b,c相当于三个标签,format()将参数中等值的字符串替换进去,这就是关键字参数
另外,关键字参数和位置参数可以一起使用
>>> '{0} love {b}.{c}'.format("I",b="love",c="python")
'I love love.python'
>>>
注意的是,若将位置参数和关键字参数一起使用时,位置参数必须在关键字参数之前,否则会出错:
>>> '{a} love {b}.{0}'.format("I",b="love","python")
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> '{a} love {b}.{2}'.format("I",b="love","python")
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>>
如果要将大括号打印出的,直接在大括号外面再加大括号(要打印转义符"\",只需要用转义符转移本身就可以)
>>> '{{0}}'.format("不打印")
'{0}'
注意位置参数没有被打印,但是这并不会产生错误
>>> "{0}:{1:.2f}".format("圆周率",3.14159)
'圆周率:3.14'
>>>
在替换域中,冒号表示格式化符号的开始,"2"的意思是四舍五入到保留两位小数点,f的意思是浮点数,所以打印出来的是3.14
多多练习:
#1
print('i am {},age {},{}'.format('seven',18,'alex'))
#2
print('i am {},age {},{}'.format(*['seven',18,'alex']))
#3
print('i am {0},age {1},really {0}'.format('seven',18))
#4
print('i am {0},age {1},really {0}'.format(*['seven',18]))
#5
print('i am {name},age {age},really {name}'.format(name='seven',age=18))
#6
print('i am {name},age {age},really {name}'.format(**{'name':'seven','age':18}))
#7
print('i am {0[0]},age {0[1]},really {0[2]}'.format([1,2,3],[11,22,33]))
#8
print('i am {:s},age {:d},really {:f}'.format('seven',18,8888.1))
#9
print('i am {:s},age {:d}'.format(*['seven',18]))
#10
print('i am {name:s},age {age:d}'.format(name='seven',age=18))
#11
print('i am {name:s},age {age:d}'.format(**{'name':'seven','age':18}))
#12
print('numbers: {:b},{:o},{:d},{:x},{:X}, {:%}'.format(15, 15, 15, 15, 15, 15.87623, 2))
#13
print('numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}'.format(15))
#14
print("numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15))
2.格式化操作符:%
格式:%[(name)][flags][width].[precision]typecode
① (name)(可选),用于选择指定的key
② flags(可选),可供选择的值有:
+右对齐;正数前加正好,负数前加负号;
-左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号;
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
③ width(可选),占有宽度
④ precision(可选),小数点后保留的位数
⑤ typecode(必选)
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o,将整数转换成 八 进制表示,并将其格式化到指定位置
x,将整数转换成十六进制表示,并将其格式化到指定位置
d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F,同上
g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%,当字符串中存在格式化标志时,需要用 %%表示一个百分号
常用的%格式化操作符
举例:
>>> '%c' % 97
'a'
>>> '%c%c%c%c%c' % (72,82,90,105,80)
'HRZiP'
>>>
>>> "%d转换为八进制是: %o" % (123,123)
'123转换为八进制是: 173'
>>>
>>> '%f科学计数法表示: %e' % (1495000000,1495000000)
'1495000000.000000科学计数法表示: 1.495000e+09'
>>>
格式化操作符的辅助命令举例:
>>> '%5.1f' % 27.987
' 28.0'
>>> '%.2e' % (27.987)
'2.80e+01'
>>> '%10d' % 5
' 5'
>>> '%-10d' % 5
'5 '
>>> '%010d' % 5
'0000000005'
>>> '%#X' % 1
'0X1'
>>> '%#X' % 100
'0X64'
>>>
多多练习:
#1
print('i am %s' % "alex")
#2
print('i am %.2f' % 3.1415926)
#3
print('i am %s age %d' % ('alex',18))
#4
print('i am %s age %s' % ('alex',18))
#5
print('i am %s age %s' % ('alex',[1,2,3]))
#6
print('i am %(name)s age %(age)d' % {'name':'alex','age':18})
#7
print('i am %(pp).2f' % {'pp':123.42556})
#8
print('i am %.2f %%' % 99.56789)
#8
print('i am %(pp).2f %%' % {'pp':123.42556})
3.python转义符及其含义
作业题:
1.请问以下这行代码会打印什么内容?
"{{1}}".format("不打印", "打印")
结果为‘{1}’,特殊功能被大括号给剥夺,位置参数没有被输出,但是不会报错
2.如果想想显示Pi = 3.14,format前面的字符串要怎么填写?
>>> "{0}:{1:.2f}".format("Pi",3.14159)
'Pi:3.14'
>>>