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发送Email方法实例
Aug 21 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
python实现自动更换ip的方法
May 05 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
使用Python生成XML的方法实例
Mar 21 Python
微信跳一跳python代码实现
Jan 05 Python
Python数据集切分实例
Dec 08 Python
python构建基础的爬虫教学
Dec 23 Python
Python 实现交换矩阵的行示例
Jun 26 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php多任务程序实例解析
2014/07/19 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Django 请求Request的具体使用方法
2019/11/11 Python
Python如何存储数据到json文件
2020/03/09 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
老总助理工作岗位职责
2014/02/06 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
付款证明格式范文
2015/06/19 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL