自 Python 3.6 引入以来,f-string(格式化字符串字面量)已成为 Python 中最受欢迎、最直观的字符串格式化方式。它不仅可读性强,而且执行效率高。

本文将从基础用法开始,深入到初学者经常关心的数字格式化 (.2f, %)、对齐 (<, ^,>),以及更多高级技巧,帮助读者全面掌握 f-string。

1. 基础用法:{}

f-string 的基础是在一个字符串前加上 fF,然后在字符串中用花括号 {} 包裹变量或表达式。

name = "Alice"
age = 30

# 1. 插入变量
print(f"你好, {name}!")

# 2. 执行表达式
print(f"{name} 明年就 {age + 1} 岁了。")

# 3. 调用函数或方法
print(f"你的名字大写是: {name.upper()}")

# 4. 访问字典或列表
user = {'name': 'Bob', 'id': 123}
print(f"用户: {user['name']} (ID: {user['id']})")

输出:

你好, Alice!
Alice 明年就 31 岁了。
你的名字大写是: ALICE
用户: Bob (ID: 123)

2. 核心:格式化迷你语言 (The Mini-Language)

f-string 真正的威力来自于花括号内的“格式化说明符”。它使用冒号 (:) 来激活。

基本语法:{value:format_spec}

format_spec (格式说明符) 的内容非常丰富,来分解读者一般最关心的几个部分。


3. 数字格式化 (你最关心的 .2f%)

这是 f-string 最常用的功能之一,尤其是在处理数据和金融时。

(A) 浮点数 (小数) - :f
  • f 代表 "Fixed-point" (定点数),即常规的小数形式。

  • .N 用来指定小数点后的位数,并且会自动四舍五入

{value:.Nf}

pi = 3.1415926
price = 12.345
cost = 50

# :.2f - 你问到的:保留两位小数 (会四舍五入)
print(f"Pi 约等于: {pi:.2f}")      # 输出: 3.14
print(f"价格: {price:.2f}")       # 输出: 12.35 (注意 .345 被四舍五入)

# 自动补零
print(f"费用: {cost:.2f}")         # 输出: 50.00
(B) 百分比 - :%
  • % 会自动将数字乘以 100,然后添加一个 % 号。

  • 结合 .N,可以控制乘以 100 后的小数位数

{value:.N%}

ratio = 0.75
growth_rate = 0.05234

# :.0% - 保留0位小数的百分比
print(f"进度: {ratio:.0%}")         # 输出: 75%

# :.2% - 保留2位小数的百分比
print(f"增长率: {growth_rate:.2%}")  # 输出: 5.23% (0.05234 * 100 = 5.234)
(C) 整数 - :d 和补零
  • :d 代表 "Decimal" (十进制整数)。

  • :0N 是一种常用技巧,表示总宽度为 N,不足的前面用 0 填充

file_num = 42
total_width = 5

# :05d - 总共5位数,用0在左侧填充
print(f"文件名: file_{file_num:05d}.txt") # 输出: file_00042.txt
(D) 千位分隔符 - ,
  • , 是一个非常方便的指令,用于自动添加千位分隔符。

large_number = 1234567890
large_float = 9876543.21

# :,d - 整数千位分隔
print(f"市值: ${large_number:,d}")   # 输出: $1,234,567,890

# :,.2f - 浮点数千位分隔并保留2位小数
print(f"销量: {large_float:,.2f}")    # 输出: 9,876,543.21

4. 对齐与填充 (你关心的 <^)

对齐用于控制值在给定的总宽度 (width) 内的显示位置。这在制作表格时极为有用。

通用语法::[fill][align][width]

  • [fill] (可选): 填充字符,比如 *, _, (空格是默认值)。

  • [align] (可选): 对齐方式。

    • :< : 左对齐 (Left) (默认)

    • :^ : 居中对齐 (Center)

    • :> : 右对齐 (Right)

  • [width] (必需): 希望的总字符宽度。

text = "Hello"

# :<10 - 左对齐,总宽10 (Hello后有5个空格)
print(f"'{text:<10}'")

# :>10 - 右对齐,总宽10 (Hello前有5个空格)
print(f"'{text:>10}'")

# :^10 - 居中对齐,总宽10 (前后各有2/3个空格)
print(f"'{text:^10}'")

# 结合 [fill] 填充字符
# :*^20 - 居中对齐,总宽20,用 '*' 填充
print(f"'{text:*^20}'")

输出:

'Hello     '
'     Hello'
'  Hello   '
'*******Hello********'

5. 终极组合:对齐、精度、类型全都要

f-string 最强大的地方在于可以将这些指令组合起来。

组合语法::[fill][align][width][,][.precision][type]

用一个制作表格的实际例子来展示组合的力量:

items = [
    ("Apple", 5, 0.75),
    ("Banana", 12, 0.3333),
    ("Cherry", 105, 0.055),
]

# 1. 打印表头
# 'Item' 左对齐, 宽10
# 'Qty' 居中, 宽5
# 'Price' 右对齐, 宽8
print(f"{'Item':<10} | {'Qty':^5} | {'Price':>8}")
print("-" * 27) # 打印分隔线

# 2. 循环打印内容
for item, qty, price in items:
    # {item:<10}  : 字符串, 左对齐, 宽10
    # {qty:^5d}   : 整数, 居中, 宽5
    # {price:>8.2f}: 浮点数, 右对齐, 宽8, 保留2位小数
    print(f"{item:<10} | {qty:^5d} | {price:>8.2f}")

输出 (一个完美对齐的表格):

Item       |  Qty  |    Price
---------------------------
Apple      |   5   |     0.75
Banana     |  12   |     0.33
Cherry     |  105  |     0.06

(注意 0.3333 和 0.055 都被正确地四舍五入并对齐了)


6. 更多高级技巧

(A) 调试 (Python 3.8+)

这是一个超级有用的调试功能。在变量后加上 =,f-string 会同时打印变量名和它的值

user = "Admin"
count = 10
print(f"{user=} {count=}") 
# 输出: user='Admin' count=10
(B) 日期时间格式化

f-string 可以直接格式化 datetime 对象,使用与 time.strftime() 相同的格式代码。

from datetime import datetime
now = datetime.now()

print(f"现在时间: {now:%Y-%m-%d %H:%M:%S}")
# 输出: 现在时间: 2025-11-01 00:03:23 (根据当前时间)
(C) 转换标志:!s, !r, !a

在冒号 : 之前,还可以使用 ! 来强制转换类型。

  • !s : 调用 str() (默认)

  • !r : 调用 repr() (显示带引号的字符串或调试信息)

  • !a : 调用 ascii()

my_string = "你好"

print(f"{my_string}")   # 输出: 你好
print(f"{my_string!r}")  # 输出: '你好'
print(f"{my_string!a}")  # 输出: '\u4f60\u597d'
(D) 显示花括号

如果想在 f-string 中显示 {} 怎么办?使用双层括号 {{}}

print(f"f-string 使用 {{ 和 }} 来显示花括号")
# 输出: f-string 使用 { 和 } 来显示花括号

总结

f-string 已经成为 Python 中字符串格式化的黄金标准。通过组合使用宽度、对齐 (<, ^, >)、填充、精度 (.Nf) 和类型 (%, d, f),可以构建出任何你想要的格式化输出。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐