前言

对于Python这种动态语言来说,字符处理这种事情简直是易如反掌,在Python的众多功能中只能算小儿科,然而,就是这样的小儿科,却也衍生出了各种不同的派别,什么正则表达式,什么编码格式,如果往深处钻研,都是非常复杂的。当然,今天这篇博客不会像它们一样让你头疼,今天我们只介绍一个小小的内容——字符串格式化。

字符串格式化虽然不复杂,也没有高深的内涵,但是在编程中每个人都会用得到,从而也诞生了很多不同的方法,这篇文章主要讨论各种方法的优劣。

0、字符串拼接

介绍

字符串拼接大概是大家最早接触到的字符串处理吧,这种方法几乎在所有编程语言中都是一样的,就是一行"str1" + "str2",大道至简。但之所以它的序号是0,是因为它实在是“不入流”的一种做法,只能算字符串格式化中的“旁门左道”,算不得“名门正派”,在很多项目中也不会使用这种方法,因为格式难以统一。在Python中,它的写法是这样的:

1
2
3
4
text1 = "Hello"
text2 = "World"
text = text1 + text2
print(text)

显而易见,这些代码会在终端输出HelloWorld,看起来很方便很简洁也很优雅对吗,但是一遇到复杂的业务场景,马上它的劣势就体现了出来:

1
2
3
4
num1 = 2
num2 = 3
text = num1 + "*" + num2 + "的结果是:" + num1*num2
print(text)

如果你按照示例代码这样去写,那么恭喜你,你写出了一个错误的代码,解释器会“友好的”提示你:只能将字符串与字符串拼接,而不能将字符串与整数类型拼接。怎么样?是不是感觉到它的坑了?正确代码应该这样写:

1
2
3
4
num1 = 2
num2 = 3
text = str(num1) + "*" + str(num2) + "的结果是:" + str(num1*num2)
print(text)

这样才是正确的。但是你肯定也发觉出它的劣势了,那就是:写法臃肿,稍不注意就会出错,甚至很多精通Python的大佬在代码复杂起来的时候也不免犯这种低级错误。

总结

优点

简单易学,小白也能理解,在业务不复杂的时候用起来非常方便。

缺点

业务复杂起来,就显得臃肿繁杂,而且容易出错,所以在大项目中显然不推荐这种写法。

1、%格式化

介绍

这种方法已经非常古老,已经淘汰了,原因也很简单,就是写起来很复杂,可读性差,变量一多就很容易混淆,这严重违背了Python的初衷。不信?我们看一段代码:

1
2
3
4
5
region = "中国"
time = "最近几天"
weather = "温度再创新高"
text = "在%s,自八月以来,每天温度都在上涨,尤其是%s,%s" % (region,time,weather)
print(text)

上述代码就会输出:在中国,自八月以来,每天温度都在上涨,尤其是最近几天,温度再创新高。看起来还好对么?我们试试更多的变量:

1
2
3
4
5
6
w1 = 38
w2 = 37
w3 = 40
w4 = 42
text = "最近几天的温度分别是:%d摄氏度,%d摄氏度,%d摄氏度与%d摄氏度" % (w1,w2,w3,w4)
print(text)

上面代码的运行结果连猜带蒙也能懂个大概,会输出最近几天的温度分别是:38摄氏度,37摄氏度,40摄氏度与42摄氏度,不过需要注意有两个点:

第一,对比上面的代码,%s改为了%d,这是因为要格式化的是整数而非字符串,所以需要用表示整数的转义字符%d,同样,要表示其它的类型,也得用不同的转义字符,现在明白它复杂的原因了吧,不同的类型需要不同的转义符,一旦用了它,你将陷入%的地狱,太痛苦了。

第二,变量一多,字符串马上就复杂了起来,对应关系很不明显,令人抓狂。

所以,%表示法现在已经被完全弃用,没有什么人再用了。

总结

优点

无.

缺点

结构复杂臃肿,容易踩坑,可读性极差。

2、format格式化

介绍

这个方法算是现在比较常用的了,这个方法在Python2.6中新引进,就是用来解决%格式化的一系列问题的,用法相对要简单的多,就拿0的例子来吧:

1
2
3
4
num1 = 2
num2 = 3
text = "{}*{}的结果是{}".format(num1,num2,num1*num2)
print(text)

这样就比前两个方法都简单明了了,而且也不容易出错,format还有高级用法:

1
2
3
4
num1 = 1
num2 = 3
text = "{0}+{0}+{0}的结果是{1}".format(num1,num2)
print(text)

这段代码也很好理解,会输出1+1+1的结果是3,大括号里面的数字用于指定format函数里面的参数的位置,只要使用同一个索引数字,就可以重复使用format里面的参数,这样又可以让代码变得简洁一些。

总结

优点

简单易懂,功能强大,书写起来简洁优雅。

缺点

对于变量的对应关系还是不够明确,阅读的时候需要反复查看。

3、f-string格式化

介绍

这算是最通用也最好用的方法了,在Python3.6中加入,我们前面说了format也有缺点,f-string简直是专为解决这个缺点来的,二话不说上代码:

1
2
3
4
num1 = 2
num2 = 3
text = f"{num1}*{num2}的结果是{num1*num2}"
print(text)

这很简单,几乎无需解释,只要在字符串前加上f,就能在大括号中直接输入变量名,很简单。

总结

优点

简洁优雅,变量对应关系明显,书写方便,是最好的一种方法。

缺点

Python3.6中才加入,所以对于低版本不兼容,其他就没有缺点了。

总结

这么多方法,当然是f-string最好用,以后在项目中也尽量用这种方法,简洁优雅,性能也是最强大的,不管怎样,希望Python继续更新,能够出现更多简洁优雅的特性。