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基础练习之用户登录实现代码分享
Nov 08 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
python决策树之CART分类回归树详解
Dec 20 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
python如何建立全零数组
Jul 19 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
python 实时调取摄像头的示例代码
Nov 25 Python
详解Python模块化编程与装饰器
Jan 16 Python
python实现三阶魔方还原的示例代码
Apr 28 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php数组查找函数总结
2014/11/18 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
js仿淘宝放大镜效果
2020/12/28 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
基于Python的文件类型和字符串详解
2017/12/21 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
Python中关于浮点数的冷知识
2019/09/22 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
中医学专业自荐信范文
2014/04/01 职场文书
会计演讲稿范文
2014/05/23 职场文书
捐助倡议书
2015/01/19 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
初中思品教学反思
2016/02/20 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python