在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. react设置默认state和默认props

    1.默认状态设置 1.constructor (ES6) constructor(props) { this.state = { n: ... } } 2.getInitialState (ES5) ...

  2. 深入JavaScript对象创建的细节

    最近深入学习javascript后,有个体会:面向对象的方式编程才是高效灵活的编程,也是现在唯一可以让代码更加健壮的编程方式.如果我们抛开那些玄乎的抽象出类等等思想,我自己对面向对象的从写程序的角度理 ...

  3. Hadoop,大数据,云计算三者之间的关系

    大数据和云计算是何关系?关于大数据和云计算的关系人们通常会有误解.而且也会把它们混起来说,分别做一句话直白解释就是:云计算就是硬件资源的虚拟化;大数据就是海量数据的高效处理.大数据.hadoop及云计 ...

  4. Codeforces Round #345 (Div. 2) C (multiset+pair )

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  5. [转载]系统管理:update-alternatives

    http://blog.csdn.net/dbigbear/article/details/4398961 好吧,其实博主也是转载的. update-alternatives --display | ...

  6. Makefile中的 =,:=,?=,+= 的差异

    在Makefile中常常遇见这几种等操作,总结一下具体区别. =  是最基本的赋值 :=  是用右值覆盖左值 ?=  判断,如果左值没有被赋值过就赋以右值,否则,不做赋值动作 += 在左值后面连接右值 ...

  7. Selenium判断获取的元素是否可见(display:none)

    在爬虫中需要自动登陆并判断是否登陆成功,如果登陆错误的话还需要知道错误提示信息,此时需要判断提示信息是否可见 if self.element_exist_xpath('//*[@id="bu ...

  8. uboot各文件及文件夹分析

    1.配置编译 uboot的配置编译需要在linux原生文件夹下,因为在编译过程中会生成符号链接.在windows中不支持.配置方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make ...

  9. android Handler post sendMessage

    Handler 为Android操作系统中的线程通信工具,包为android.os.Handler. 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列.Handler可以通过这两个队 ...

  10. Codeforces 351B Jeff and Furik 概率 | DP

    B. Jeff and Furik time limit per test 1 second memory limit per test 256 megabytes input standard in ...