在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','','Teacher']
s4 = 'I am a {0[2]},my name is {0[0]},{0[1]} years old'.format(l1)
print(s4)

6. 填充与对齐

填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
s = '{:>10}'.format('')  #>后面的10 表示总共多少字符,10个字符,18占两个,剩余的用空格填充
print(s) # 18 :后面带填充的字符,默认为空 s1 = "{:0>10}".format('')
print(s1) # 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'

%和format的区别的更多相关文章

  1. SimpleDateFormat中parse和format的区别

    parse()返回的是一个Date类型数据,format返回的是一个StringBuffer类型的数据 //SimpleDateFormat中的parse方法可以 //把String型的字符串转换成特 ...

  2. Python2.6与Python2.7的format用法区别

    Python2.6不支持format(123456L, ",")或format(123, ",")的format用法,会报下面的错误 ValueError: U ...

  3. python3 开发面试题(%s和format的区别)5.31

    在格式化字符串中有两种方法: 1.%s 2.format 大家常用的是哪一种方法?为什么要用你选的这种方法? 我们先看一个例子: 首先我们定义一个我军需要击杀的恐怖分子的地理坐标为 c=(128,12 ...

  4. C# string.Format 和 String.Format 的区别

    string.Format 和 String.Format  ,不论是用法还是意思,都是一样的 怎么使用? 通过 占位符来替换 ,类似于 Replace 的操作 string s = string.F ...

  5. 使用printf和String.format格式化输出

    格式化输出 在哪些情况下使用格式化输出: 异常打印到日志中使用格式化输出有利于排查错误原因: printf格式化 示例: public class PrintfTest { public static ...

  6. YUV和RGB格式分析

    做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于opencv的处理,很多东西并不需要我们过多深入的去探讨,现在需要完全抛弃现有的算法程序,需要从内存中一个字 ...

  7. python笔试题(1)

            为了充实自己,小编决定上传自己见到的笔试题和面试题.可能要写好长时间,一时半会写不了多少,只能说遇到多少写多少吧,但是只要小编有时间,会持续上传(但是答案却不能保证,所以有看到错误的及 ...

  8. APNS导致消息丢失和发送效率原因

    http://blog.csdn.net/tlq1988/article/details/9612237 首先说明一下,本文只是介绍一些容易被开发者忽视,而导致性能低下问题.并不是介绍如何向苹果设备成 ...

  9. YUV和RGB格式分析【转】

    转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...

随机推荐

  1. bzoj3232

    Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到 ...

  2. JavaScript滚动条的制作

    效果演示   这个效果的制作是借助setTimeout的第三个参数.setTimeout/setInterval,这两个函数相信前端开发同学都很熟悉.它们在非IE(6-9)浏览器中还可以如下使用: v ...

  3. Spring源码解析-Advice中的Adapter模式

    在spring中与通知相关的类有: 以Advice结尾的通知接口    MethodBeforeAdvice    AfterReturningAdvice   ThrowsAdvice 以Inter ...

  4. ubuntu14.04安装GTX 1080 ti遇到黑屏问题

    实验室给我配置了一个1080ti的卡,那个激动,windows下1000+的FPS,跑分40W,无敌,言归正传,ubuntu14.04下配nvidia 1080的驱动还是出现了很多问题,差点就要重装系 ...

  5. Codeforces Round #340 (Div. 2) A

    A. Elephant time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  6. git与svn与github与码云的区别

    1.git与github(https://www.oschina.net/)的区别 Git(https://git-scm.com/)是一个版本控制工具 github是一个用git做版本控制的项目托管 ...

  7. udhcpd源码分析2--读取配置文件

    1:重要的结构体 读取配置文件信息到全局的结构体struct server_config_t server_config中,这个结构在很多文件中都有引用到很重要. /* dhcpd.h */ stru ...

  8. stout代码分析之十:c++11之move和forward

    stout中大量使用了c++11的特性,而c++11中move和forward大概是最神奇的特性了. 左值和右值的区别 ; // a是左值,0是右值 int b = rand(); // b是左值,r ...

  9. 2017 济南综合班 Day 6

    循环移动 (cyclic.cpp/c/pas) (1s/256M) 问题描述 给出一个字符串S与N个操作.每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K ...

  10. bzoj 1700: [Usaco2007 Jan]Problem Solving 解题 ——dp

    Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...