Python字符串格式化
前言
对于Python这种动态语言来说,字符处理这种事情简直是易如反掌,在Python的众多功能中只能算小儿科,然而,就是这样的小儿科,却也衍生出了各种不同的派别,什么正则表达式,什么编码格式,如果往深处钻研,都是非常复杂的。当然,今天这篇博客不会像它们一样让你头疼,今天我们只介绍一个小小的内容——字符串格式化。
字符串格式化虽然不复杂,也没有高深的内涵,但是在编程中每个人都会用得到,从而也诞生了很多不同的方法,这篇文章主要讨论各种方法的优劣。
0、字符串拼接
介绍
字符串拼接大概是大家最早接触到的字符串处理吧,这种方法几乎在所有编程语言中都是一样的,就是一行"str1" + "str2"
,大道至简。但之所以它的序号是0,是因为它实在是“不入流”的一种做法,只能算字符串格式化中的“旁门左道”,算不得“名门正派”,在很多项目中也不会使用这种方法,因为格式难以统一。在Python中,它的写法是这样的:
1 | text1 = "Hello" |
显而易见,这些代码会在终端输出HelloWorld
,看起来很方便很简洁也很优雅对吗,但是一遇到复杂的业务场景,马上它的劣势就体现了出来:
1 | num1 = 2 |
如果你按照示例代码这样去写,那么恭喜你,你写出了一个错误的代码,解释器会“友好的”提示你:只能将字符串与字符串拼接,而不能将字符串与整数类型拼接。怎么样?是不是感觉到它的坑了?正确代码应该这样写:
1 | num1 = 2 |
这样才是正确的。但是你肯定也发觉出它的劣势了,那就是:写法臃肿,稍不注意就会出错,甚至很多精通Python的大佬在代码复杂起来的时候也不免犯这种低级错误。
总结
优点
简单易学,小白也能理解,在业务不复杂的时候用起来非常方便。
缺点
业务复杂起来,就显得臃肿繁杂,而且容易出错,所以在大项目中显然不推荐这种写法。
1、%格式化
介绍
这种方法已经非常古老,已经淘汰了,原因也很简单,就是写起来很复杂,可读性差,变量一多就很容易混淆,这严重违背了Python的初衷。不信?我们看一段代码:
1 | region = "中国" |
上述代码就会输出:在中国,自八月以来,每天温度都在上涨,尤其是最近几天,温度再创新高
。看起来还好对么?我们试试更多的变量:
1 | w1 = 38 |
上面代码的运行结果连猜带蒙也能懂个大概,会输出最近几天的温度分别是:38摄氏度,37摄氏度,40摄氏度与42摄氏度
,不过需要注意有两个点:
第一,对比上面的代码,%s
改为了%d
,这是因为要格式化的是整数而非字符串,所以需要用表示整数的转义字符%d
,同样,要表示其它的类型,也得用不同的转义字符,现在明白它复杂的原因了吧,不同的类型需要不同的转义符,一旦用了它,你将陷入%的地狱,太痛苦了。
第二,变量一多,字符串马上就复杂了起来,对应关系很不明显,令人抓狂。
所以,%表示法现在已经被完全弃用,没有什么人再用了。
总结
优点
无.
缺点
结构复杂臃肿,容易踩坑,可读性极差。
2、format格式化
介绍
这个方法算是现在比较常用的了,这个方法在Python2.6中新引进,就是用来解决%格式化的一系列问题的,用法相对要简单的多,就拿0的例子来吧:
1 | num1 = 2 |
这样就比前两个方法都简单明了了,而且也不容易出错,format还有高级用法:
1 | num1 = 1 |
这段代码也很好理解,会输出1+1+1的结果是3
,大括号里面的数字用于指定format函数里面的参数的位置,只要使用同一个索引数字,就可以重复使用format里面的参数,这样又可以让代码变得简洁一些。
总结
优点
简单易懂,功能强大,书写起来简洁优雅。
缺点
对于变量的对应关系还是不够明确,阅读的时候需要反复查看。
3、f-string格式化
介绍
这算是最通用也最好用的方法了,在Python3.6中加入,我们前面说了format也有缺点,f-string简直是专为解决这个缺点来的,二话不说上代码:
1 | num1 = 2 |
这很简单,几乎无需解释,只要在字符串前加上f,就能在大括号中直接输入变量名,很简单。
总结
优点
简洁优雅,变量对应关系明显,书写方便,是最好的一种方法。
缺点
在Python3.6中才加入,所以对于低版本不兼容,其他就没有缺点了。
总结
这么多方法,当然是f-string最好用,以后在项目中也尽量用这种方法,简洁优雅,性能也是最强大的,不管怎样,希望Python继续更新,能够出现更多简洁优雅的特性。