Python中应该使用%还是format来格式化字符串


Posted in Python onSeptember 25, 2018

%还是format

1、皇城PK

Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢?

自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本就不算个问题。不信你往下看。

# 定义一个坐标值
c = (250, 250)
# 使用%来格式化
s1 = "敌人坐标:%s" % c

上面的代码很明显会抛出一个如下的TypeError:

TypeError: not all arguments converted during string formatting

像这类格式化的需求我们需要写成下面丑陋的格式才行:

# 定义一个坐标值
c = (250, 250)
# 使用%丑陋的格式化...
s1 = "敌人坐标:%s" % (c,)

而使用format就不会存在上面的问题:

# 定义一个坐标值
c = (250, 250)
# 使用format格式化
s2 = "敌人坐标:{}".format(c)

很显然,上面这一个理由就已经足够让你在以后的项目中使用format了。

2、新特性

在Python3.6中加入了f-strings:

In[1]: name = "djb"
In[2]: age = 18
In[3]: f"My name is {name}.I'm {age}"
Out[3]: "My name is djb.I'm 18"

常用的format用法

1、通过位置

In[1]: data = ["djb", 18]
In[2]: "Name:{0}, Age:{1}".format(*data)
Out[2]: 'Name:djb, Age:18'

2、通过关键字

In[1]: data = {"name": "djb", "age": 18}
In[2]: "Name:{name}, Age:{age}".format(**data)
Out[2]: 'Name:djb, Age:18'

3、通过对象属性

In[1]: class Person(object):
  ...:   def __init__(self, name, age):
  ...:     self.name = name
  ...:     self.age = age
  ...:   def __str__(self):   
  ...:     return "This guy is {self.name}, {self.age} years old.".format(self=self)
  ...:   
In[2]: p = Person("djb", 18)
In[3]: str(p)
Out[3]: 'This guy is djb, 18 years old.'

4、通过下标

In[1]: "{0[0]} is {0[1]} years old.".format(data)
Out[1]: 'djb is 18 years old.'

5、填充与对齐

填充常跟对齐一起使用

^、<、>分别是居中、左对齐、右对齐,后面带宽度

:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。

In[1]: "{:>10}".format('18')
Out[1]: '    18'
In[2]: "{:0>10}".format('18')
Out[2]: '0000000018'
In[3]: "{:A>10}".format('18')
Out[3]: 'AAAAAAAA18

补充一个字符串自带的zfill()方法:

Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0。

zfill()方法语法:str.zfill(width)

参数width指定字符串的长度。原字符串右对齐,前面填充0。

返回指定长度的字符串。

In[1]: "18".zfill(10)
Out[1]: '0000000018'

6、精度与类型f

精度常跟类型f一起使用。

In[1]: "{:.2f}".format(3.1415926)
Out[1]: '3.14'

其中.2表示长度为2的精度,f表示float类型。

7、其他进制

主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。

In[1]: "{:b}".format(18)
Out[1]: '10010'
In[2]: "{:d}".format(18)
Out[2]: '18'
In[3]: "{:o}".format(18)
Out[3]: '22'
In[4]: "{:x}".format(18)
Out[4]: '12'

8、千位分隔符

In[1]: "{:,}".format(1234567890)
Out[1]: '1,234,567,890'

最后,总结一下,这样对比下来选用format比%是更好的,但是每个人有每个人不同的用法,在此只是列举出format对比%的一些优势。

总结

以上所述是小编给大家介绍的Python中应该使用%还是format来格式化字符串,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中操作文件之write()方法的使用教程
May 25 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python给你的头像加上圣诞帽
Jan 04 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
python 将md5转为16字节的方法
May 29 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
了解一下python内建模块collections
Sep 07 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
python爬虫--selenium模块
Mar 31 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
Django如何自定义分页
Sep 25 #Python
Python使用googletrans报错的解决方法
Sep 25 #Python
Python实现简单的用户交互方法详解
Sep 25 #Python
Python中反射和描述器总结
Sep 23 #Python
python3实现爬取淘宝美食代码分享
Sep 23 #Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 #Python
Python实现注册、登录小程序功能
Sep 21 #Python
You might like
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Python程序暂停的正常处理方法
2019/11/07 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
学校安全生产承诺书
2014/05/23 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
户籍证明书标准模板
2014/09/10 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Mysql中常用的join连接方式
2022/05/11 MySQL