在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. POI 10.28

    [POI2015]KUR 不考虑构造原串再匹配 考虑开始位置满足什么条件才能匹配. 显然,开始位置确定,后面的字符都确定了. 而且,a,n互质,所以必然能遍历n的剩余系,从不同位置开始,初始的a*s+ ...

  2. 【简单算法】37.Shuffle an Array

    题目: 打乱一个没有重复元素的数组. 示例: // 以数字集合 1, 2 和 3 初始化数组. ,,}; Solution solution = new Solution(nums); // 打乱数组 ...

  3. 利用caffe的solverstate断点训练

    你可以从系统 /tmp 文件夹获取,名字是什么 caffe.ubuntu.username.log.INFO.....之类 ====================================== ...

  4. UIView的autoresizingMask属性研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  5. UVA10600:ACM Contest and Blackout(次小生成树)

    ACM Contest and Blackout 题目链接:https://vjudge.net/problem/UVA-10600 Description: In order to prepare ...

  6. 题解 【luoguP1967 NOIp提高组2013 货车运输】

    题目链接 题解 题意 给你一个无向图,求两个点之间的一条路径,使路径上的最小值最大 算法:Kruskal最大生成树+倍增lca 分析 首先容易知道,答案一定在该图的最大生成树上 之后问题便转换成了树上 ...

  7. bzoj [POI2005]Kos-Dicing 二分+网络流

    [POI2005]Kos-Dicing Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1835  Solved: 661[Submit][Status][ ...

  8. Activity-ListView

    在手机中经常有列表方式.如果Activity中只有唯一一个List(这也是通常的情况),可以继承ListActivity来实现.我们用两个例子来学习List. List例子一:利用Android自带的 ...

  9. Android之极光推送发送自定义消息

    Android端实现主要代码: <span style="font-size:14px;">import java.io.IOException; import jav ...

  10. 状压DP的总结

    状压dp的标志 ①数据小 ②通过题目所给出的条件以后得到的特征集合小 一:CF259div2 D: 题目大意:保证b[i]中每个数互质,给出a[i],然后求1~n的abs(a[i]-b[i])最小.a ...