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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
tensorflow实现简单的卷积神经网络
May 24 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
python实现朴素贝叶斯算法
Nov 19 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
如何在Django项目中引入静态文件
Jul 26 Python
Django CSRF认证的几种解决方案
Mar 03 Python
python获取响应某个字段值的3种实现方法
Apr 30 Python
教你用Python matplotlib库制作简单的动画
Jun 11 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 win下Socket方式发邮件类
2009/08/21 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
对javascript继承的理解
2016/10/11 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
python实现将内容分行输出
2015/11/05 Python
详解python读取image
2019/04/03 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
python是怎么被发明的
2020/06/15 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
客户代表实习人员自我鉴定
2013/09/27 职场文书
自荐书模板
2013/12/15 职场文书
结婚邀请函范文
2014/01/14 职场文书
外出培训学习心得体会
2016/01/18 职场文书
初中生物教学反思
2016/02/20 职场文书
协议书格式模板
2016/03/24 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
详解Django的MVT设计模式
2021/04/29 Python