Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

f-string

f-string 是 Python 3.6+ 引入的最强字符串格式化方式:

f"...{表达式}..."

它最大的能力是:

  • 内嵌任何表达式
  • 高性能(比 format 和 % 更快)
  • 可读性最强
  • 支持格式化控制(数字、日期、补零、对齐等)

1. f-string 基础用法

name = "Martin"
age = 30
print(f"My name is {name}, age {age}")

2. 支持任意表达式

四则运算

f"{1 + 2 + 3}"

函数调用

f"{len([1, 2, 3])}"

方法调用

f"{name.upper()}"

3. f-string 可直接打印字典、列表、对象

d = {"a": 1}
print(f"dict: {d}")

4. 变量名自动打印(调试神器)

Python 3.8+:

a = 10
print(f"{a=}")

输出:

a=10

更强:

print(f"{a=}, {a*2=}")

5. f-string 格式化数字(非常常用)

5.1 小数位数控制

f"{3.1415926:.2f}"  # 3.14

5.2 千分位

f"{1234567:,}"      # '1,234,567'

5.3 百分比

f"{0.123:.2%}"      # '12.30%'

5.4 补零

f"{7:03d}"          # '007'

5.5 对齐和宽度(左右中对齐)

f"{'hi':<10}"  # 左对齐,占10宽度
f"{'hi':>10}"  # 右对齐
f"{'hi':^10}"  # 居中

6. f-string 格式化日期

from datetime import datetime
now = datetime.now()
print(f"{now:%Y-%m-%d %H:%M:%S}")

7. f-string 中使用字典 key

user = {"name": "Martin", "age": 30}
f"{user['name']}"

8. f-string 内联 if 条件

f"{'VIP' if is_vip else 'Normal'}"

9. f-string 内使用 escape

如果要在 f-string 内写大括号,需要用 {{ }}

f"{{Hello}}"

输出:

{Hello}

10. f-string 多行(非常常用)

msg = f"""
User: {name}
Age : {age}
"""

11. f-string 调试 JSON(with indent)

import json
print(f"{json.dumps(user, indent=2)}")

12. f-string + lambda(少见但合法)

f"{(lambda x: x*2)(5)}"   # '10'

13. f-string + 加上格式说明符 = 调试更强

x = 3.14159
print(f"{x=:.2f}")

输出:

x=3.14

14. f-string 黑魔法:变量名自动提取(inspect)

调试框架里常见:

def debug(var):
    print(f"{var=}")  # Python 自动提取表达式源码

15. f-string 性能极高(最快)

速度比较:

格式方式 速度 可读性
f-string ⭐⭐⭐⭐⭐(最快) 最强
format() 中等 中等
% 格式 次快 不够直观
拼接 “+” 最慢 最乱

16. f-string 内嵌复杂表达式(但要适度)

f"{[x*x for x in range(5)]}"

可以,但太复杂会降低可读性。

17. f-string vs format 对照表

功能 f-string format
数字格式化
内联表达式
变量名调试
内置性能 ⭐⭐⭐⭐⭐ ⭐⭐⭐

18. f-string 不能做的事(很少)

  • ❌ f-string 不能动态生成变量名
  • ❌ f-string 不能跨引号嵌套(需要转义)
  • ❌ f-string 表达式不能包含 \(如换行)

📌 最推荐的使用模式(写法最 Pythonic)

1. 配合表达式

f"total={sum(prices):.2f}"

2. 配合字典取值

f"user={user['id']}, name={user['name']}"

3. 用 =

f"{response.status_code=}"

4. 嵌入 JSON 调试

f"{json.dumps(config, indent=2)}"