Python格式化字符串f-string的简单使用

一种十分方便的python字符串格式化方法:f-string

简介

f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 F 修饰符引领的字符串(f'xxx' 或 F'xxx'),以大括号 {} 标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式:

While other string literals always have a constant value, formatted strings are really expressions evaluated at run time.
(与具有恒定值的其它字符串常量不同,格式化字符串实际上是运行时运算求值的表达式。)
—— Python Documentation

f-string在功能方面不逊于传统的%-formatting语句str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化

用法

f-string可以起到类似槽函数的效果,用大括号 {} 表示被替换字段,其中直接填入替换内容,例如

1
2
3
>>> a = 1
>>> f"{a}23"
'123'

可以看到在字符串前加了f以后,再使用大括号,大括号里的内容就会自动替换,起到类似槽函数的效果,而前面不加f的话,就没有这个效果

1
2
3
>>> a = 1
>>> "{a}23"
'{a}23'

不加f的话,就得使用槽函数,如下

1
2
3
>>> a = 1
>>> "{}23".format(a)
'123'

可以看到f-string使用起来更加简洁

f-string的大括号{}也可以填入表达式或调用函数,Python会求出其结果并返回填入的字符串内

1
2
3
4
5
>>> import math
>>> f"{1+2*4}"
'9'
>>> f"{math.pow(4, 2)}"
'16.0'

f-string大括号内所用的引号不能和大括号外的引号定界符冲突,可根据情况灵活切换 ' 和 " :

1
2
3
4
5
6
7
>>> f'I am {"Eric"}'
'I am Eric'
>>> f'I am {'Eric'}'
File "<stdin>", line 1
f'I am {'Eric'}'
^
SyntaxError: invalid syntax

f-string大括号内不能使用 \ 转义,事实上不仅如此,f-string大括号内根本就不允许出现 \ ,如果确实需要 \ ,则应首先将包含 \ 的内容用一个变量表示,再在f-string大括号内填入变量名:

1
2
3
4
5
6
7
>>> f"newline: {ord('\n')}"
File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash

>>> newline = ord('\n')
>>> f"newline: {newline}"
'newline: 10'

f-string大括号外如果需要显示大括号,则应输入连续两个大括号 :

1
2
3
4
>>> f'5 {"{stars}"}'
'5 {stars}'
>>> f'{{5}} {"stars"}'
'{5} stars'