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中is和id的用法
Apr 03 Python
python复制与引用用法分析
Apr 08 Python
Python字符串处理实现单词反转
Jun 14 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
Python检测数据类型的方法总结
May 20 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
新手入门学习python Numpy基础操作
Mar 02 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
python操作链表的示例代码
Sep 27 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动态生成虚拟现实VRML网页
2006/10/09 PHP
解决GD中文乱码问题
2007/02/14 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP单例模式详细介绍
2015/07/01 PHP
Yii快速入门经典教程
2015/12/28 PHP
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
详解Python发送邮件实例
2016/01/10 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
如何在python中执行另一个py文件
2020/04/30 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Keras搭建自编码器操作
2020/07/03 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
Ejb技术面试题
2015/04/29 面试题
平面设计师工作职责范文
2013/12/03 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
校运会入场式解说词
2014/02/10 职场文书
优秀高中学生评语
2014/12/30 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python