tags
type
status
date
slug
summary
category
password
icon
从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快!
在后文中f-string被称为F字符串。
📝 主旨内容
在Python 3.6之前,有两种将Python表达式嵌入到字符串文本中进行格式化的主要方法:
%-formatting
和str.format()
。从Python 3.6开始,增加了F字符串方法,F字符串方法与其他两种方法相比,是格式化字符串的一种很好的新方法。
先说下
%-formatting
和str.format()
的使用,以及它们的局限性。1️⃣ %-formatting
方法
%-formatting
是Python格式化的OG(original generation),使用上可能会遇到很多问题,如无法正确显示元组和字典。如果需要使用的参数过多,代码就变得不易阅读了,甚至感觉凌乱。并且这种方式不支持元组或字典。
2️⃣ str.format()
方法
str.format()
方法是python2.6引入的,是对%-formatting
方法的改进。它使用正常的函数调用语法,并且可以通过对要转换为字符串的对象的__format __()
方法进行扩展。默认规则是顺序索引嵌入字符串,也可以通过索引改变嵌入字符串的次序。
将索引改为变量名也是可以的,但必须在format()引用参数。
如果采用字典定义,则可以通过
**
来实现参数引用。3️⃣ f-string
方法
f-string
方法也可以称为格式化字符串,F字符串是开头有一个f的字符串文字,以及包含表达式的大括号将被其值替换。表达式在运行时进行渲染,然后使用__format__
协议进行格式化。语法与
str.format()
使用的语法类似,但不需要结尾补充.format()
。f
改为 F
也是生效的。由于f字符串是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中。如计算、函数调用,甚至可以创建对象。
__str __()
和__repr __()
方法处理对象如何呈现为字符串,因此您需要确保在类定义中包含至少一个这些方法。如果必须选择一个,请使用__repr __()
,因为它可以代替__str __()
。__str __()
返回的字符串是对象的非正式字符串表示,应该可读。 __repr __()
返回的字符串是官方表示,应该是明确的。调用str()
和repr()
比直接使用__str __()
和__repr __()
更好。默认情况下,f字符串将使用
__str __()
,但如果包含转换标志!r
,则可以确保它们使用__repr __()
。多行文字可以使用
"""
。在使用F字符串需要注意: 1.如果在字典键周围使用与在F字符串外部使用相同类型的引号,则第一个字典键开头的引号将被解释为字符串的结尾。 2.如果字符串本身有大括号,为了使字符串出现大括号,必须使用双大括号。 3.F字符串可以使用反斜杠转义符,但是不能在F字符串的表达式部分中使用。 4.lambda表达式,如果!
:
}
不在括号中,会被解释为表达式结尾,需要在()
中定义lambda表达式。
f-string的使用技巧
f-string填充
填充分为左填充、右填充、居中填充。
左填充表示在字符串左侧填充,右填充表示在字符串右侧填充,居中填充表示在字符串左右两侧对称填充。
>
表示左填充
<
表示右填充
^
表示居中填充。
记忆方法:括号口朝左边,就表示左填充;括号口朝右边,就表示右填充。
f-string保留小数位数 f"{num:xxx}"
其中
xxx
的格式如下格式 | 说明 |
width | 整数width指定宽度 |
0width | 整数width指定宽度,0表示最高位用0补足宽度 |
width.precision | 整数width指定宽度,整数precision表示精度(保留小数点后几位小数) |
f-string进制转换
还可以用数字进行进制转换,如:十六进制转换、二进制转换、八进制转换、科学计数法等
f-string千位符分隔符、百分比
千位符分隔符和百分比也可以很简单的实现。
:.2%
即为设置保留 2 位小数并在字符串末尾添加一个百分号,且会自动根据保留小数位进行四舍五入。f-string调试模式 {variable = }
你仔细观察下上面的例子,是不是发现语法书写变化了,这种写法就是f-string调试模式。
f-string 的调试功能是另一种书写语法,即使用
{variable = }
代替 variable = {}
,如下面代码所示。可以看到使用调试模式减少了代码量,同时输出的内容是一致的。由此可见调试模式可以节省大量时间和精力,使代码看起来更整洁。
在 f-string 的调试模式中,还可以执行数学运算。
f-string日期格式化
如果想格式化日期,可以创建一个示例日期时间值。就像在应用程序中格式化日期一样,可以在 f-string 中定义你想要的格式,例如:<date_format>