在python中字符串的格式化分为两种:%和format。那么我们在什么时候来使用它们呢?它们有什么区别呢?
举个例子:我们根据一个坐标来表示一个动作
#定义一个坐标 point = (250,250) #使用%来格式化 s = '朝着敌人的坐标%s开炮'%point print(s) #直接报错 #TypeError: not all arguments converted during string formatting #将s改为如下就不会报错了 s = '朝着敌人的坐标%s开炮'%(point,) print(s) # 不报错
同样的我们使用format就不会出现这样的问题:
#使用format格式化 s = '朝着敌人的坐标{}开炮'.format(point) print(s) # 正常输出
由此可见:format比%的功能更强。
下面我们来对format的用法进行简单的了解
1.直接f+string
在python3.6以后,加入了一个新特性:f-strings
#我们定义两个变量 name age name = 'snow' age = 18 s = f'我叫{name},今年{age}岁' print(s)
可以直接在字符串的前面加上f来格式化字符串,更简单。
2 通过位置
#我们也可以通过索引来直接用 使用*将列表打散,通过索引来取值 s1 = '我叫{0},今年{1}岁,喜欢{2}'.format(*l1) print(s1)
3 通过关键字
#也可以通过**将字典打散,通过key来取值
d = {'name':'shine','age':20,'hobby':'music'} s2 = 'my name is {name},i am {age} years old , i like {hobby}'.format(**d) print(s2)
4.通过对象属性
#在类中,我们可以自定义__str__方法来实现特定的输出 class Person: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return 'Name:{self.name} Age:{self.age}'.format(self = self) # 我们可以将self传入{}中 person = Person('sun',22) print(person)
5.通过下标
#我们可以利用下标+索引 l1 = ['zhe','20','Teacher'] s4 = 'I am a {0[2]},my name is {0[0]},{0[1]} years old'.format(l1) print(s4)
6. 填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
s = '{:>10}'.format('18') #>后面的10 表示总共多少字符,10个字符,18占两个,剩余的用空格填充 print(s) # 18 :后面带填充的字符,默认为空 s1 = "{:0>10}".format('18') print(s1) #0000000018 s2 = '{:*>10}'.format('18是否') print(s2) #******18是否
备注:Python 字符串中的zfill()方法: 返回指定长度的字符串,原字符串右对齐,前面填充0。
zfill()方法语法:str.zfill(width)
参数width指定字符串的长度。原字符串右对齐,前面填充0。
返回指定长度的字符串。
s = '演员'
ret = s.zfill(10)
print(ret)
7. 精度与类型f
精度常跟类型f一起使用。
{ :.nf} .format(数字) .n 表示保留n位小数
num = 2.13658
print('{:.2f}'.format(num)) #2.14 四舍五入取固定位数的小数 其中.2表示长度为2的精度
num = 3
print('{:.2f}'.format(num)) #3.00 对于整数直接在保留固定位的小数位
8. 其他进制
format中,b、d、o、x分别表示二进制、十进制、八进制、十六进制。
In[1]: "{:b}".format(18) # 取18的二进制 Out[1]: '10010' In[2]: "{:d}".format(18) # 取18的十进制 Out[2]: '18' In[3]: "{:o}".format(18) # 取18的八进制 Out[3]: '22' In[4]: "{:x}".format(18) # 取18的十六进制 Out[4]: '12'
9. 千位分隔符
{:,}.format 中 冒号加逗号 表示可以将一个数字三位三位的用逗号分隔
In[1]: "{:,}".format(1234567890) Out[1]: '1,234,567,890'