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基类函数的重载与调用实例分析
Jan 12 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
Python PO设计模式的具体使用
Aug 16 Python
python中使用input()函数获取用户输入值方式
May 03 Python
详解python logging日志传输
Jul 01 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
python如何发送带有附件、正文为HTML的邮件
Feb 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的FTP学习(一)
2006/10/09 PHP
屏蔽浏览器缓存另类方法
2006/10/09 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
Python 函数返回值的示例代码
2019/03/11 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
采购员岗位职责
2013/11/15 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
防汛工作情况汇报
2014/10/28 职场文书
毕业论文致谢词
2015/05/14 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
解决xampp安装后Apache无法启动
2022/03/21 Servers
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技