深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?

Posted 黄至尊qwe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?相关的知识,希望对你有一定的参考价值。


3种字符串格式化工具的简单介绍

​python2.5​​​版本之前,我们使用的是老式字符串格式化输出​​%s​​。

从​​python3.0​​​版本开始起(python2.6同期发布),Python中同时支持两个版本的格式化,多出来的一个新版本就是利用​​format()​​函数,进行格式化输出。

但是​​python3.6​​​版本后,又引入了一种新的字符串格式化方式​​f-string​​。从%s格式化到format格式化再到f-string格式化,格式化的方式越来越直观,f-string的效率也较前两个高一些,使用起来也比前两个更简单一些。

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python

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)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_format字符串格式化_02

② %格式化

此种方式只支持固定形式的格式化填充,给的顺序和填充顺序完全一致。

a = "四大天王:%s、%s、%s、%s" % ("刘德华","郭富城","张学友","黎明")
print(a)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_字符串_03

③ 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)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_04

④ f-string格式化

此种方式的填充,用起来更加随意,直接在中输入变量即可,极其方便,我们用一个简单的案例看看。

# 直接在中输入变量即可,位置随意放
x1 = "刘德华"
x2 = "郭富城"
x3 = "张学友"
x4 = "黎明"

c = f"四大天王:x1x3x2x4"
print(c)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python中字符串格式化_05

3)填充功能对比

首先我们要知道​​填充​​的概念是什么,只有知道了它的概念,才能够灵活运用。

  • ​概念​​​:当指定了字符串最终的长度,但是现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满至这个长度,这就是​​“填充”​​。
① %格式化
  • ​格式​​:"%10s" % (“字符串”),使用前仔细观察书写格式
  • ​含义​​:上述10代表字符串的填充长度。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度;
  • ​注意​​:此种填充,默认是在字符串左侧填充;
a = "%s" % ("黄同学")
print(a,len(a))

b = "%10s" % ("黄同学")
print(b,len(b))

c = "%10s" % ("黄同学,我早上吃了一碗热干面")
print(c,len(c))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_字符串_06

② 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))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_07

③ 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))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_08

3)对齐功能对比

首先我们要知道​​填充​​的概念是什么,只有知道了它的概念,才能够灵活运用。

  • ​概念​​:"对齐"要与"填充"一起使用,才会显得有意义。当我们进行填充的时候,我们可以选择只在字符串左侧填充,也可以选择只在字符串右侧填充,还可以选择在字符串两侧填充(字符串居中显示的填充方式);
① %s:实现对齐功能,只有左对齐和右对齐;
# 左填充
a = %10s % (黄同学)
print(a,len(a))

# 右填充
b = %-10s % (黄同学)
print(b,len(b))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_format字符串格式化_09

② format():实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;
# 左填充
a = :>10.format(黄同学)
print(a,len(a))

# 右填充
b = :<10.format(黄同学)
print(b,len(b))

# 居中填充
c = :^10.format(黄同学)
print(c,len(c))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_字符串_10

③ 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))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_format字符串格式化_11

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))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_12

③ 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))

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_13

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)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_14


完成浮点数的填充:

a = %.2f % (3.1415926)
print(a)

b = %.3f % (3.1415926)
print(b)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_15

③ 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)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_16


完成浮点数的填充:

a = :.2f.format(3.14159268)
print(a)

b = :.3f.format(3.14159268)
print(b)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python中字符串格式化_17

④ f-string格式化

完成整数的填充:

num1 = 3000
num2 = "3000"
# 不指定d符号,既可以完成字符串的填充,又可以完成数字的填充
a = fnum1
print(a)

a1 = fnum2
print(a1)
# 当指定了d符号后,只可以填充数字,不能填充字符串,否则会报错
# 使用符号d填充整数,是推荐写法
b = fnum1:d
print(b)

b1 = fnum2:d
print(b1)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_18


完成浮点数的填充:

num = 3.14159268

a = fnum:.2f
print(a)

b = fnum:.3f
print(b)

结果如下:

深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?_python_19


以上是关于深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?的主要内容,如果未能解决你的问题,请参考以下文章

python之字符串类型的格式化

python中字符串格式化的四种方法

Python 字符串格式化输出的3种方式

[python基础]字符串方法

Python面试必考重点之字符串与正则表达式第一关——python语言中的四种格式化字符串的方法/什么是模板字符串及如何使用

在 django 模板中使用 python 字符串格式化