%和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','','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。
s = '演员'
ret = s.zfill(10)
print(ret)
7. 精度与类型f
num = 2.13658
print('{:.2f}'.format(num)) #2.14 四舍五入取固定位数的小数 其中.2表示长度为2的精度 num = 3
print('{:.2f}'.format(num)) #3.00 对于整数直接在保留固定位的小数位
8. 其他进制

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的区别的更多相关文章
- SimpleDateFormat中parse和format的区别
parse()返回的是一个Date类型数据,format返回的是一个StringBuffer类型的数据 //SimpleDateFormat中的parse方法可以 //把String型的字符串转换成特 ...
- Python2.6与Python2.7的format用法区别
Python2.6不支持format(123456L, ",")或format(123, ",")的format用法,会报下面的错误 ValueError: U ...
- python3 开发面试题(%s和format的区别)5.31
在格式化字符串中有两种方法: 1.%s 2.format 大家常用的是哪一种方法?为什么要用你选的这种方法? 我们先看一个例子: 首先我们定义一个我军需要击杀的恐怖分子的地理坐标为 c=(128,12 ...
- C# string.Format 和 String.Format 的区别
string.Format 和 String.Format ,不论是用法还是意思,都是一样的 怎么使用? 通过 占位符来替换 ,类似于 Replace 的操作 string s = string.F ...
- 使用printf和String.format格式化输出
格式化输出 在哪些情况下使用格式化输出: 异常打印到日志中使用格式化输出有利于排查错误原因: printf格式化 示例: public class PrintfTest { public static ...
- YUV和RGB格式分析
做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于opencv的处理,很多东西并不需要我们过多深入的去探讨,现在需要完全抛弃现有的算法程序,需要从内存中一个字 ...
- python笔试题(1)
为了充实自己,小编决定上传自己见到的笔试题和面试题.可能要写好长时间,一时半会写不了多少,只能说遇到多少写多少吧,但是只要小编有时间,会持续上传(但是答案却不能保证,所以有看到错误的及 ...
- APNS导致消息丢失和发送效率原因
http://blog.csdn.net/tlq1988/article/details/9612237 首先说明一下,本文只是介绍一些容易被开发者忽视,而导致性能低下问题.并不是介绍如何向苹果设备成 ...
- YUV和RGB格式分析【转】
转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...
随机推荐
- react设置默认state和默认props
1.默认状态设置 1.constructor (ES6) constructor(props) { this.state = { n: ... } } 2.getInitialState (ES5) ...
- 深入JavaScript对象创建的细节
最近深入学习javascript后,有个体会:面向对象的方式编程才是高效灵活的编程,也是现在唯一可以让代码更加健壮的编程方式.如果我们抛开那些玄乎的抽象出类等等思想,我自己对面向对象的从写程序的角度理 ...
- Hadoop,大数据,云计算三者之间的关系
大数据和云计算是何关系?关于大数据和云计算的关系人们通常会有误解.而且也会把它们混起来说,分别做一句话直白解释就是:云计算就是硬件资源的虚拟化;大数据就是海量数据的高效处理.大数据.hadoop及云计 ...
- 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 ...
- [转载]系统管理:update-alternatives
http://blog.csdn.net/dbigbear/article/details/4398961 好吧,其实博主也是转载的. update-alternatives --display | ...
- Makefile中的 =,:=,?=,+= 的差异
在Makefile中常常遇见这几种等操作,总结一下具体区别. = 是最基本的赋值 := 是用右值覆盖左值 ?= 判断,如果左值没有被赋值过就赋以右值,否则,不做赋值动作 += 在左值后面连接右值 ...
- Selenium判断获取的元素是否可见(display:none)
在爬虫中需要自动登陆并判断是否登陆成功,如果登陆错误的话还需要知道错误提示信息,此时需要判断提示信息是否可见 if self.element_exist_xpath('//*[@id="bu ...
- uboot各文件及文件夹分析
1.配置编译 uboot的配置编译需要在linux原生文件夹下,因为在编译过程中会生成符号链接.在windows中不支持.配置方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make ...
- android Handler post sendMessage
Handler 为Android操作系统中的线程通信工具,包为android.os.Handler. 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列.Handler可以通过这两个队 ...
- 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 ...