深度对比Python的3种“字符串格式化”方法,看看你喜欢哪一种?
作者:黄同学
来源:数据分析与统计学之美
python2.5
版本之前,我们使用的是老式字符串格式化输出%s
。
从python3.0
版本开始起(python2.6同期发布),Python中同时支持两个版本的格式化,多出来的一个新版本就是利用format()
函数,进行格式化输出。
但是python3.6
版本后,又引入了一种新的字符串格式化方式f-string
。从%s格式化到format格式化再到f-string格式化,格式化的方式越来越直观,f-string的效率也较前两个高一些,使用起来也比前两个更简单一些。
上面我们对3种字符串格式化工具进行了简单的介绍,以下是它们的应用对比:
1)基本用法
这里首先先介绍这3个工具的基本用法,基本格式如下。
-
%格式化
:占位符%,搭配%符号一起使用; -
format()格式化
:占位符{},搭配format()函数一起使用; -
f-string格式化
:占位符{},搭配f符号一起使用;
① 对比使用,观察各自的特点
a = "%s张飞、%s关羽、%s刘备、%s赵云" % (1,2,3,4)
display(a)
b = "{}张飞、{}关羽、{}刘备、{}赵云".format(1,2,3,4)
display(b)
c = f"{1}张飞、{2}关羽、{3}刘备、{4}赵云"
display(c)
结果如下:
② %格式化
此种方式只支持固定形式的格式化填充,给的顺序和填充顺序完全一致。
a = "四大天王:%s、%s、%s、%s" % ("刘德华","郭富城","张学友","黎明")
print(a)
结果如下:
③ format()格式化
此种方式不仅支持固定形式的格式化填充,还支持位置格式化填充,即共有三种形式。
- 第一种方式:固定形式的格式化填充,给的顺序和填充顺序完全一致。
- 第一种方式:大括号{ }中写的是format()传入值所对应的下标。
- 第二种方式:大括号{ }中的变量,和format()传入值是一一对应的。
# 第一种形式
b1 = "四大天王:{}、{}、{}、{}".format("刘德华","郭富城","张学友","黎明")
print(b1)
# 第二种形式
b2 = "四大天王:{2}、{0}、{3}、{1}".format("刘德华","郭富城","张学友","黎明")
print(b2)
# 第三种形式
x1 = "刘德华"
x2 = "郭富城"
x3 = "张学友"
x4 = "黎明"
b3 = "四大天王:{p}、{q}、{r}、{s}".format(p=x4,q=x2,r=x1,s=x3)
print(b3)
结果如下:
④ f-string格式化
此种方式的填充,用起来更加随意,直接在{}中输入变量即可,极其方便,我们用一个简单的案例看看。
# 直接在{}中输入变量即可,位置随意放
x1 = "刘德华"
x2 = "郭富城"
x3 = "张学友"
x4 = "黎明"
c = f"四大天王:{x1}、{x3}、{x2}、{x4}"
print(c)
结果如下:
2)填充功能对比
首先我们要知道填充
的概念是什么,只有知道了它的概念,才能够灵活运用。
-
概念
:当指定了字符串最终的长度,但是现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满至这个长度,这就是“填充”
。
① %格式化
-
格式
:"%10s" % ("字符串"),使用前仔细观察书写格式; -
含义
:上述10代表字符串的填充长度。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度; -
注意
:此种填充,默认是在字符串左侧填充;
a = "%s" % ("黄同学")
print(a,len(a))
b = "%10s" % ("黄同学")
print(b,len(b))
c = "%10s" % ("黄同学,我早上吃了一碗热干面")
print(c,len(c))
结果如下:
② format()格式化
-
格式
:"{:10}".format("字符串"),使用前仔细观察书写格式; -
含义
:上述10代表字符串的填充长度。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度; -
注意
:此种填充,默认是在字符串右侧填充;
a = "{:10}".format("黄同学")
print(a,len(a))
b = "{:10}".format("黄同学")
print(b,len(b))
c = "{:10}".format("黄同学,我早上吃了一碗热干面")
print(c,len(c))
结果如下:
③ f-string格式化
-
格式
:f"{name1:10}",使用前仔细观察书写格式; -
含义
:上述10代表字符串的填充长度,name1代表某个字符串变量。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度; -
注意
:此种填充,默认是在字符串右侧填充;
name1 = "黄同学"
name2 = "黄同学,我早上吃了一碗热干面"
a = f"{name1:10}"
print(a,len(a))
b = f"{name2:10}"
print(b,len(b))
结果如下:
3)对齐功能对比
首先我们要知道填充
的概念是什么,只有知道了它的概念,才能够灵活运用。
-
概念
:"对齐"要与"填充"一起使用,才会显得有意义。当我们进行填充的时候,我们可以选择只在字符串左侧填充,也可以选择只在字符串右侧填充,还可以选择在字符串两侧填充(字符串居中显示的填充方式);
① %s:实现对齐功能,只有左对齐和右对齐;
# 左填充
a = '%10s' % ('黄同学')
print(a,len(a))
# 右填充
b = '%-10s' % ('黄同学')
print(b,len(b))
结果如下:
② format():实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;
# 左填充
a = '{:>10}'.format('黄同学')
print(a,len(a))
# 右填充
b = '{:<10}'.format('黄同学')
print(b,len(b))
# 居中填充
c = '{:^10}'.format('黄同学')
print(c,len(c))
结果如下:
③ f-string:实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;
name = "黄同学"
a = f"{name:>10}"
print(a,len(a))
b = f"{name:<10}"
print(b,len(b))
c = f"{name:^10}"
print(c,len(c))
结果如下:
4)使用“任意符号”完成填充功能
这个知识点必须在讲完填充和对齐后,才能为大家演示。其实没有为什么,就是语法是这样的,我们就必须这样做。
① %格式化
旧版语法的%格式化,使用"特定符号"填充,很麻烦,不直接,你也不用去管。这里主要看新版语法中format()格式化和f-string格式化,进行"特定符号"填充。
② format()格式化
# 左填充
a = '{:_>10}'.format('黄同学')
print(a,len(a))
# 右填充
b = '{:_<10}'.format('黄同学')
print(b,len(b))
# 居中填充
c = '{:_^10}'.format('黄同学')
print(c,len(c))
结果如下:
③ f-string格式化
name = "黄同学"
a = f"{name:_>10}"
print(a,len(a))
b = f"{name:_<10}"
print(b,len(b))
c = f"{name:_^10}"
print(c,len(c))
结果如下:
5)与“数字”相关的格式化填充技巧
① 你有必要了解的知识
经过前面的学习和叙述,我们已经知道这3种方法,都是完成字符串格式化
的操作的,但是为何它们又可以填充数字
呢?
原因
:Python自动帮我们做了一次隐式转换,但是这种隐式转换是需要付出代价的,它会消耗额外的性能,牺牲速度。因此我们有特定的语法去解决这个问题。
② %格式化
-
%s
表示填充字符串;%d
表示填充整数;%f
表示填充小数;
完成整数的填充:
# 仅仅使用%s,既可以完成字符串的填充,又可以完成数字的填充
a = '%s' % (3000)
print(a)
a1 = '%s' % ("3000")
print(a1)
# 当使用了%d后,只可以填充数字,不能填充字符串,否则会报错
# 使用%d填充整数,是推荐写法
b = '%d' % (3000)
print(b)
b1 = '%d' % ("3000")
print(b1)
结果如下:
完成浮点数的填充:
a = '%.2f' % (3.1415926)
print(a)
b = '%.3f' % (3.1415926)
print(b)
结果如下:
③ format()格式化
完成整数的填充:
# 不指定d符号,既可以完成字符串的填充,又可以完成数字的填充
a = '{:$>5}'.format(3000)
print(a)
a1 = '{:$>5}'.format("3000")
print(a1)
# 当指定了d符号后,只可以填充数字,不能填充字符串,否则会报错
# 使用符号d填充整数,是推荐写法
b = '{:¥>5d}'.format(3000)
print(b)
b1 = '{:¥>5d}'.format("3000")
print(b1)
结果如下:
完成浮点数的填充:
a = '{:.2f}'.format(3.14159268)
print(a)
b = '{:.3f}'.format(3.14159268)
print(b)
结果如下:
④ f-string格式化
完成整数的填充:
num1 = 3000
num2 = "3000"
# 不指定d符号,既可以完成字符串的填充,又可以完成数字的填充
a = f'{num1}'
print(a)
a1 = f'{num2}'
print(a1)
# 当指定了d符号后,只可以填充数字,不能填充字符串,否则会报错
# 使用符号d填充整数,是推荐写法
b = f'{num1:d}'
print(b)
b1 = f'{num2:d}'
print(b1)
结果如下:
完成浮点数的填充:
num = 3.14159268
a = f'{num:.2f}'
print(a)
b = f'{num:.3f}'
print(b)
结果如下:
- oracle建表、建主键、外键基本语法
- F-Stack KNI配置注意事项
- F-Stack 助力 HTTP 网络服务器性能提升
- How to build Multi-Language Web Sites with ASP.NET 2.0 and VS.Net 2005
- 动态生成TreeView方法(二)
- Gradle打jar包如何上传到maven本地库
- POJO应用框架:Spring与EJB3.0的比较
- spring Boot 整合mybatis 如何使用多数据源
- 动态生成TreeView方法(一)
- hadoop系列之深入优化
- Using sqlite with .NET
- Gridview行上下移动自己做的一个小例子(第一种方法)
- Hadoop伪分布式集群安装部署
- sql 表有没有自增列,插入自增列值
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法