专业编程基础技术教程

网站首页 > 基础教程 正文

Python 中 4 种格式化字符串的方法

ccvgpt 2024-10-12 14:28:53 基础教程 8 ℃

对于开发的同学来说,字符串我们每天都在接触。本文将介绍 Python 中 4 种主要的格式化字符串的方法。当然,在文章最后,我会给大家一个简单的思路去判断什么时候用哪一种方法比较合适。

为了便于说明,假定已经有了如下变量

Python 中 4 种格式化字符串的方法

我们最终需要打印的字符串类似这样

0x00 用 % 操作符进行格式化

Python 内置有操作符 % ,使用这个符号你能比较方便的根据位置对字符串进行格式化。如果你之前接触过 C ,那么你会觉得这和 printf 函数比较类似。下面有个简单的例子

这里用 %s 格式说明符来告诉 Python 这个位置要填入一个字符串,它的值是 name 。

当然还有其它类型的格式说明符可以控制字符的输出形式,比如可以将数字以十六进制的形式打印出来,也可以添加空格等符号让排版更好看。

现在,我们用 %x 把一个数字转化为十六进制,然后打印出来

如果你想填充多个变量,很简单,把变量按顺序放在一个元祖里就可以了,就像这样

当然,如果你觉得按顺序不太方便,你也可以给占位符命名,然后填充

这种方式呢,以后维护起来更容易一些,毕竟,不用按顺序去慢慢对应占位符与变量。

0x01 用 str.format 进行格式化

Python 3 引入了一种新的格式化方法,和 % 类似,也能轻松的根据位置来进行格式化

同样也可以使用占位符

值得注意的是,这里将数字转化为十六进制的时候使用的 :x 后缀。这种使用函数格式化字符串的方法,相比使用 % 的那一种,写起来更方便一些。

0x02 用 f'...' 进行字符串插值

这个是 Python 3.6 才引入的,这种形式可以将变量直接写在字符串里来解析,看个例子

这种方式更加简单粗暴,极大的增强了可读性。

这种方式,Python 是如何解析的呢?其实很简单,就是将 f'...' 这个串转化为一系列的字面字符串与变量,然后使用 + 号连接起来。

假设我们现在有这么一个函数

函数里面对 f'...' 怎么解析的呢,其实就是这样

当然,Python 实际解析中肯定要比这个快很多,毕竟是在底层作的相应的优化,这里大概说下实现的思路。

简单的列下代码分析结果

看来上面的思路没有问题。

有人想说,类似数字转十六进制怎么玩呢。简单

加个 :#x 后缀就搞定了。

0x03 字符串模版

字符串模版用起来可能相比于上面的形式要麻烦一些,来看一个例子

一方面,字符串模版会使用到 string 模块。另一方面,字符串模版不能使用格式符,比如,如果我们想要将数字转为十六进制时,得自己调用函数处理。

当然并不是说这种格式化方法没有用处,在很多地方它也是很有意义的。

如果某些格式化字符串需要用户自己书写,那这就有潜在的风险了。如果是个恶意用户,他写的格式化串可能是这样的

呀呀呀,一不小心,重要信息就泄漏了。

但是如果使用的是字符串模板呢

嘿嘿,就不会有这种问题了。

0x04 怎么选择

有这么多字符串格式化方法,那么我们需要的时候该怎么选择呢?可以参考下下面这张图。

也就是说,如果需要用户手动输入那就用字符串模板

Python 2 直接用 % 进行格式化

Python 3.6 及以上使用 f'...' 进行字符串插值,以下用 str.format 函数进行格式化

最近发表
标签列表