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实现类似ftp传输文件的网络程序示例
Apr 08 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
简单实现Python爬取网络图片
Apr 01 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
python同时替换多个字符串方法示例
Sep 17 Python
python实现五子棋程序
Apr 24 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 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的面向对象编程
2006/10/09 PHP
web方式ftp
2006/10/09 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
javascript动态加载二
2012/08/22 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
详解python开发环境搭建
2016/12/16 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
syb养殖创业计划书
2014/01/09 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
后备干部推荐材料
2014/12/24 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
Python一些基本的图像操作和处理总结
2021/06/23 Python
java实现面板之间切换功能
2022/06/10 Java/Android