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抓取网页图片示例(python爬虫)
Apr 27 Python
Python异常学习笔记
Feb 03 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
python实现教务管理系统
Mar 12 Python
python中的字符串内部换行方法
Jul 19 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Django异步任务之Celery的基本使用
Mar 23 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 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的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
Python使用minidom读写xml的方法
2015/06/03 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
python实现动态数组的示例代码
2019/07/15 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
如何选择使用结构还是类
2014/05/30 面试题
精细化工应届生求职信
2013/11/17 职场文书
秘书岗位职责
2013/11/18 职场文书
四风查摆剖析材料
2014/10/10 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
个人欠条范本
2015/07/03 职场文书
爱护公物主题班会
2015/08/17 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
MySQL系列之六 用户与授权
2021/07/02 MySQL
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL