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 稀疏矩阵-sparse 存储和转换
May 27 Python
python实现最长公共子序列
May 22 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
Python 函数返回值的示例代码
Mar 11 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
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程序设计中的MVC编程思想
2014/07/28 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
python+opencv实现动态物体识别
2018/01/09 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
学校采购员岗位职责
2014/01/02 职场文书
师范学院教师自荐书
2014/01/31 职场文书
专题组织生活会方案
2014/06/15 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
聊一聊python常用的编程模块
2021/05/14 Python