从Python 3.6 开始,F-string 是格式化字符串的新语法。相对于 %-formatting、 str.format() 格式化方式,它不仅更易读,更简洁,不易出错,而且速度更快。
我们首先了解下格式化字符串语法的发展历史...
历史中的格式化字符串
在Python 3.6 之前,有两种字符串格式化方法:%-formatting 和str.format() 。接下来,我们首先回顾一下这两种字符串格式化的方式。
% - formatting
在Python 中字符串对象支持使用 %运算符的内置操作,可以使用它实现格式化字符串,如下。
如果格式化字符串中需要插入多个变量,我们可以使用元组的形式传入变量,如下:
%-formatting 的不足
不难发现,随着字符串的长度的增长,上面看似简洁易读的代码,会显得冗长,易读性变差,如下:
str.format()函数
从 Python 2.6 开始又引入了另一种字符串格式化的方法 str.format()函数,它是对 %-formatting 的改进,基本语法是以 {} 来代替以前的 % 。 str.format() 函数支持通过索引位置、关键字、对象属性和下标等多种方式使用。
使用 str.format(),替换字段用大括号标记,如下:
通过引用其索引位置来以任何顺序引用变量:
如果插入变量名称,则会获得额外的能够传递对象的权限,然后在大括号之间引用参数和方法,如下:
也可以使用**来用字典来完成字符串格式化,如下:
str.format() 的不足
使用str.format() 的代码比使用%-formatting 的代码更易读,更灵活,但当处理多个参数和更长的字符串时,str.format() 仍然非常冗长。
F-Strings
自Python 3.6 开始引入了一种改进Python 格式字符串的新方法——F-Strings。也称为“格式化字符串常量”。
F-Strings 在形式上是以 f 或 F 修饰符引领的字符串(f'xx' 或 F'xx'),以大括号 {} 表明被替换的字段,F-Strings 在本质上并不是字符串常量,而是一个在运行时运算求值的表达式,表达式在运行时进行渲染,然后使用__format__协议进行格式化。
语法与str.format() 使用的语法类似,但更加简洁,灵活,如下:
由于F-Strings 是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中,如下:
同时,F-Strings 可以调用函数,在运行时,大括号内的表达式将在其自己的作用域中进行计算求值,然后将其与其余字符串连接在一起。
另外,F-string 大括号内也可填入lambda 表达式,但lambda 表达式中的'' 会被 F-string 误认为是表达式与格式描述符之间的分隔符,因此可能会导致一些问题,比如:
为避免歧义,我们需要将lambda表达式置于括号圆括号 ()中,如下:
联系客服