如何使用 Python f-string 格式化字符串

Posted on Wed, 25 Dec 2024 16:10:18 +0800 by LiangMingJian


前言

在 Python 中,f-string 全称 formatted string literals,支持用户在字符串前添加前缀 f 或 F,通过 {expression} 表达式,来将数值直接添加到字符串中。

官方文档

基本使用 f'{expression}'

number = 5  
print(f'输出是:{number}')
# 输出:输出是 5

在字符串前添加 f,然后在字符串里通过 {} 包裹数值或表达式,即可将对应数据应用到字符串中。

格式说明符 :

{} 中提供可选的格式说明符 :,为用户更好的控制格式化值创造条件。

格式说明符的功能支持:对齐填充,正负标记,类型转换,精度,分组等内容。

对齐填充

对齐支持选项:

  • <:左对齐
  • >:右对齐
  • ^:居中
  • =:强制对齐正负符号后的数字。

在对齐时,除了要写入对齐选项,往往还要结合填充选项和长度选项。在对齐选项的前面添加填充选项(单个字符或者单个数字),在对齐选项的后面添加对齐的长度。

print(f"{1:*<6}")
# 输出:1*****,左对齐,往右边填充数据

print(f"{1:2<6}")
# 输出:122222,当然也可以填充数字

print(f"{1:*>6}")
# 输出:*****1,右对齐,往左边填充数据

print(f"{1:*^6}")
# 输出:**1***,居中,在两边填充数据

print(f"{-1:*=6}")
# 输出:-****1,在符号后面填充数据,直到包括负号有 6 位

特别的,Python 提供字段 0 用于感知正负号的零填充,适用于数字的补 0 对齐。

print(f"{1:06}")
# 输出:000001,数字前补 0 到 6 位

print(f"{-1:06}")
# 输出:-00001,对负数,也一样补 0 到整个字符串有 6 位

正负标记

正负标记选项:

  • +:无论正负号都显示
  • -:只显示负号
  • :空格,自适应在正数前空格,负数前加负号
print(f"{1:+}")  
print(f"{-1:+}")
# 输出:+1 和 -1

print(f"{1:-}")  
print(f"{-1:-}")
# 输出:1 和 -1

print(f"{1: }")  
print(f"{-1: }")
# 输出: 1(前面有个空格)
# 输出:-1

类型转换

类型标记:

  • s 或 None:字符串类型,默认的类型,可以省略
  • b:以二进制格式输出
  • d:以十进制格式输出
  • o:以八进制格式输出
  • x:以十六进制格式输出,其中英文字母为小写
  • X:以十六进制格式输出,其中英文字母为大写
  • n:以十进制格式输出,但会根据系统(除了中文系统)自动的在合适区域插入数字分隔符,如 1,000,000
  • c:将输入的数字自动转换为对应 Unicode 字符输出
  • e, E:以科学计数法输出
  • f, F:以定点表示法输出
  • g, G:智能选择定点表示法或科学计数法输出
  • %:以百分比进行输出
print(f"{100000:b}")  # 11000011010100000
print(f"{100000:d}")  # 100000
print(f"{100000:o}")  # 303240
print(f"{100000:x}")  # 186a0
print(f"{100000:X}")  # 186A0

print(f"{80:c}")
# 输出:P,P 的 Unicode 十进制表示为 80

print(f"{100:e}")  # 1.000000e+02
print(f"{100:E}")  # 1.000000E+02

print(f"{0.1:f}")  # 0.100000
print(f"{0.1:F}")  # 0.100000

print(f"{0.1:g}")  # 0.1
print(f"{0.00000001:g}")  # 1e-08
print(f"{0.00000001:G}")  # 1E-08

print(f"{0.1:%}") # 10.000000%

特别的,Python 提供字段 # 用于在输出二进制,八进制,十六进制数据时,在数据前面添加对应的 0b0o0x 标记。

print(f"{1000:#b}")  # 0b1111101000
print(f"{1000:#o}")  # 0o1750
print(f"{1000:#x}")  # 0x3e8
print(f"{1000:#X}")  # 0X3E8

精度

进度标记:.precision ,在点后面填写所需要展示的精度内容,需要注意,该标记必须搭配定点表示法标记 f, F 或百分比标记 % 一起使用。

print(f"{100:.2f}")  
print(f"{0.1:.2f}")
print(f"{0.1:.2%}")
# 输出:100.00 和 0.10 和 10.00%

分组

分组标记:

  • ,:对千位以上数字按每 4 个数位插入逗号作为分组标记。
  • _:对于千位以上数字,或二进制,八进制,十六进制等格式数字,按每 4 个数位插入分组标记。
print(f"{10000:,}")  
print(f"{10000:_}")
# 输出:10,000 和 10_000

print(f"{100000:_b}")
# 输出:1_1000_0110_1010_0000
print(f"{100000:_o}")
# 输出:30_3240
print(f"{100000:_x}")
# 输出:1_86a0
print(f"{100000:_X}")
# 输出:1_86A0

官方文档

特别的

Python 提供特殊的 = 标记允许是使用上述格式化字符输出时,将表达式直接输出,而不是只输出表达式结果。

bugs = 'roaches'
print(f'Debugging {bugs=}')
# 输出:Debugging bugs='roaches'

官方文档