f-string
f-string 是 Python 3.6+ 引入的最强字符串格式化方式:
f"...{表达式}..."
它最大的能力是:
- 内嵌任何表达式
- 高性能(比 format 和 % 更快)
- 可读性最强
- 支持格式化控制(数字、日期、补零、对齐等)
name = "Martin"
age = 30
print(f"My name is {name}, age {age}")
四则运算
f"{1 + 2 + 3}"
函数调用
f"{len([1, 2, 3])}"
方法调用
f"{name.upper()}"
d = {"a": 1}
print(f"dict: {d}")
Python 3.8+:
a = 10
print(f"{a=}")
输出:
a=10
更强:
print(f"{a=}, {a*2=}")
f"{3.1415926:.2f}" # 3.14
f"{1234567:,}" # '1,234,567'
f"{0.123:.2%}" # '12.30%'
f"{7:03d}" # '007'
f"{'hi':<10}" # 左对齐,占10宽度
f"{'hi':>10}" # 右对齐
f"{'hi':^10}" # 居中
from datetime import datetime
now = datetime.now()
print(f"{now:%Y-%m-%d %H:%M:%S}")
user = {"name": "Martin", "age": 30}
f"{user['name']}"
f"{'VIP' if is_vip else 'Normal'}"
如果要在 f-string 内写大括号,需要用 {{ }}:
f"{{Hello}}"
输出:
{Hello}
msg = f"""
User: {name}
Age : {age}
"""
import json
print(f"{json.dumps(user, indent=2)}")
f"{(lambda x: x*2)(5)}" # '10'
x = 3.14159
print(f"{x=:.2f}")
输出:
x=3.14
调试框架里常见:
def debug(var):
print(f"{var=}") # Python 自动提取表达式源码
速度比较:
| 格式方式 | 速度 | 可读性 |
|---|---|---|
| f-string | ⭐⭐⭐⭐⭐(最快) | 最强 |
| format() | 中等 | 中等 |
| % 格式 | 次快 | 不够直观 |
| 拼接 “+” | 最慢 | 最乱 |
f"{[x*x for x in range(5)]}"
可以,但太复杂会降低可读性。
| 功能 | f-string | format |
|---|---|---|
| 数字格式化 | ✅ | ✅ |
| 内联表达式 | ✅ | ❌ |
| 变量名调试 | ✅ | ❌ |
| 内置性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
- ❌ f-string 不能动态生成变量名
- ❌ f-string 不能跨引号嵌套(需要转义)
- ❌ f-string 表达式不能包含 \(如换行)
f"total={sum(prices):.2f}"
f"user={user['id']}, name={user['name']}"
f"{response.status_code=}"
f"{json.dumps(config, indent=2)}"