简介
f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,主要目的是使格式化字符串的操作更加简便。
f-string在形式上是以 f 或 F 修饰符引领的字符串(f’xxx’或 F’xxx’),以大括号 {} 标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。
用法
变量名
name = "world"
topic = f"hello {name}"
print(topic) # hello world
内联运算
topic = f"{1 + 2 * 3}" # 7
函数
# 自定义函数
cnt = lamnda x, y: x + y
a = 1
b = 2
topic = f"{cnt(a, b}" # 3
# 或直接
topic = f"{(lamnda x, y: x + y)(a, b)}" # 3
# 内置函数
name = "WORLD"
topic = f"hello {name.lower()}" # hello world
注意
大括号
f-string大括号外如果需要显示大括号,则应输入连续两个大括号{{ }};大括号内需要引号,使用引号即可。
name = "world"
topic = f"hello {name}{{!}}" # hello world{!}
多重引号
f-string大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。
name = "world"
topic = f"hello {name + '~~~'}" # hello world~~~
topic = f"""I'm {"hello " + name}""" # I'm hello world
转义符
大括号外的引号还可以使用\转义,但大括号内不能使用\转义。
name = "world"
topic = f"hello\n{name}"
print(topic)
# hello
# world
补充
填充
name = "world"
# 默认空白填充
# 左填充
topic = f"{name:>10}" # " world"
# 右填充
topic = f"{name:<10}" # "world "
# 两侧填充
topic = f"{name:^10}" # " world "
# 指定符号填充
topic = f"{name_:>10}" # "_____world"
数值正负
说明:
符号 | 说明 |
---|---|
‘’+‘’ | 正加+,负加- |
‘’-‘’ | 负加-,正不加 |
‘’ ‘’ | 负加-,正加空 |
a = 10
b = -10
aa = f"{a:+}" # "+10"
bb = f"{b:+}" # "-10"
aa = f"{a:-}" # "10"
bb = f"{b:-}" # "-10"
aa = f"{a: }" # " 10"
bb = f"{b: }" # "-10"
数字宽度精度
说明:
描述 | 说明 |
---|---|
width | 整数width指定宽度 |
0width | 整数width指定宽度,高位用0补足宽度 |
width.precision | 整数width 指定宽度,整数precision表示显示精度 |
a = 123.456
aa = f"{a:10}" # " 123.456"
aa = f"{a:010}" # "000123.456"
aa = f"{a:8.1f}" # " 123.5"
aa = f"{a:8.2f}" # " 123.46"
aa = f"{a:.2f}" # "123.46"
# 在width后面,直接加f,表示补足小数点后的位数至默认精度6
aa = f"{a:2f}" # "123.456000'
截断
当需要格式化的数据类型是“字符串”的时候,才会发生截断。
a = "hello world"
aa = f"{a:.5}" # "hello"
# 截断并填充
aa = f"{a:10.5}" # "hello "
aa = f"{a:_>10.5}" # "_____hello"
时间信息
针对date、datetime和time对象,进行年月日、时分秒等信息提取
>>> from datetime import date
# today()返回本地时间的一个date对象
a = date.today() # datetime.date(2021, 10, 12)
aa = f"{a:%Y-%m-%d}" # "2021-10-12"