Str.format方法比之 %方法的优点:
1.传入数据可以不限参数数据类型
2.参数位置可以不按照传入顺序,且单个参数可以输出多次或者不输出
3.强大的填充和对齐功能,完善的进制转换和精度控制
一:填充
#使用关键字填充
>>> #使用key填充
print('{name} today {action}'.format(name='jopen',action='play soccer'))
jopen today play soccer
#使用字典填充
>>> place={'where':'wuhan','country':'China'}
>>> print('{place[where]} is a part of {place[contury]}'.format(place=place))
wuhan is a part of China
或者
>>> place={'where':'wuhan','country':'China'}
>>> print('{where} is a part of {contury}'.format(**place))
wuhan is a part of China
#使用索引填充
>>> print('{1} is {0}'.format('fruit','apple'))
apple is fruit
#通过对象属性来填充
class Hello:
def __init__(self,name1,name2):
self.name1=name1;
self.name2=name2
def __str__(self):
return 'Hello {self.name1},I am {self.name2}'.format(self=self)
print(str(Hello('Tom','Jopen')))
Hello Tom,I am Jopen
#多次使用参数和不使用传入的参数
>>> print('{1} {1} {1},so many{1}'.format('apple','banana'))
banana banana banana,so manybanana
二:对齐与填充
对齐与填充经常一起使用
对齐:^、<、>分别是居中,左对齐,右对齐,后面带宽度
居中:居中符号为:,后面跟填充的字符,只能是一个字符,不指定填充字符默认为空格
#左填充
>>> ('{:*>8}').format('Hello')
'***Hello'
#右填充
>>> ('{:*<8}').format('Hello')
'Hello***
#中间对齐
>>> ('{:*^8}').format('Hello')
'*Hello**'
三:精度
#浮点数
>>> '{:.3f}'.format(3.1415926)
'3.142'
#字符串
>>> '{:.3s}'.format('3.1415926')
'3.1'
四:进制转换
>>> '{:b}'.format(33)
'100001'
>>> '{:d}'.format(33)
'33'
>>> '{:o}'.format(33)
'41'
>>> '{:x}'.format(33)
'21'
b,d,o,x分别为二进制,十进制,八进制,十六进制
五:格式转化
!s,!r,!a 对应str(), repr(),acdii()
>>> '{!s:*>8}'.format(8)
'*******8'