%和format的区别

  在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'

 

posted @ 2018-09-20 16:18  一抹浅笑  阅读(4679)  评论(0编辑  收藏  举报