f-string 的格式控制符(在冒号 : 之后)完整分类:
基础结构
f"{value:[[fill]align][sign][#][0][width][grouping][.precision][type]}"
一、对齐与填充
| 符号 | 含义 | 示例 | 输出 |
|---|
< | 左对齐 | f"{'hi':<5}" | 'hi ' |
> | 右对齐 | f"{'hi':>5}" | ' hi' |
^ | 居中 | f"{'hi':^5}" | ' hi ' |
= | 符号后填充数字 | f"{-5:=5}" | '- 5' |
填充字符(放在对齐符号前)
f"{'hi':*>5}" # '***hi' (星号填充)
f"{'hi':0>5}" # '000hi' (零填充)
f"{42:0>5}" # '00042' (数字默认右对齐,可省略>)
二、符号控制
| 符号 | 含义 | 示例 | 输出 |
|---|
+ | 正数也显示 + | f"{5:+}" | '+5' |
- | 负数显示 - (默认) | f"{-5:-}" | '-5' |
空格 | 正数前空格,负数 - | f"{5: }" | ' 5' (用于对齐) |
# 表格对齐示例
data = [(1, 2), (-10, 20), (100, -5)]
for a, b in data:
print(f"{a:>+4} {b:>+4}")
# 输出:
# +1 +2
# -10 +20
# +100 -5
三、宽度与分组
| 符号 | 含义 | 示例 | 输出 |
|---|
width | 最小宽度 | f"{42:5}" | ' 42' |
, | 千位分隔符 | f"{1234567:,}" | '1,234,567' |
_ | 下划线分隔(3.6+) | f"{1234567:_}" | '1_234_567' |
# | 显示进制前缀 | f"{255:#x}" | '0xff' |
# 组合使用
f"{123456789:>15,}" # ' 123,456,789'(右对齐+千位分隔)
f"{0b1010:#b}" # '0b1010'(显示二进制前缀)
四、精度控制(小数位)
| 类型 | 含义 | 示例 | 输出 |
|---|
.nf | 浮点数 n 位小数 | f"{pi:.2f}" | '3.14' |
.ng | 有效数字 n 位 | f"{pi:.3g}" | '3.14' |
.ns | 字符串最大长度 | f"{'hello':.3s}" | 'hel' |
pi = 3.14159265359
f"{pi:.2f}" # 3.14 (固定2位小数)
f"{pi:.4f}" # 3.1416 (四舍五入)
f"{pi:.2g}" # 3.1 (2位有效数字)
f"{1234567:.2e}" # 1.23e+06 (科学计数法,2位小数)
五、类型转换符
数字类型
| 符号 | 含义 | 示例 | 输出 |
|---|
d | 十进制整数 | f"{42:d}" | '42' |
b | 二进制 | f"{42:b}" | '101010' |
o | 八进制 | f"{42:o}" | '52' |
x | 十六进制(小写) | f"{255:x}" | 'ff' |
X | 十六进制(大写) | f"{255:X}" | 'FF' |
f | 定点浮点数 | f"{3.14:f}" | '3.140000' |
e / E | 科学计数法 | f"{1234:e}" | '1.234000e+03' |
g / G | 自动选择 f/e | f"{1234.5:g}" | '1234.5' |
% | 百分比 | f"{0.25:%}" | '25.000000%' |
n | 本地化数字 | 依赖系统区域设置 | - |
num = 42
f"{num:b}" # 101010
f"{num:o}" # 52
f"{num:x}" # 2a
f"{num:08b}" # 00101010(8位二进制,前导零)
其他类型
| 符号 | 含义 | 示例 |
|---|
s | 字符串(默认) | f"{text:s}" |
c | 字符(Unicode) | f"{65:c}" → 'A' |
r | repr() 表示 | f"{obj!r}" 或 f"{obj!r:20}" |
a | ascii() 表示 | f"{'中文':a}" → '\u4e2d\u6587' |
六、特殊用法
1. 嵌套表达式(动态格式)
width = 10
precision = 4
value = 12.34567
f"{value:{width}.{precision}}" # ' 12.3457'
# 等价于 f"{value:10.4f}"
2. 日期时间格式
from datetime import datetime
now = datetime.now()
f"{now:%Y-%m-%d %H:%M:%S}" # '2026-04-02 16:56:30'
f"{now:%A, %B %d, %Y}" # 'Thursday, April 02, 2026'
常用日期符号
| 符号 | 含义 | 示例 |
|---|
%Y | 4 位年份 | 2026 |
%m | 2 位月份 | 04 |
%d | 2 位日期 | 02 |
%H / %M / %S | 时分秒 | 16:56:30 |
%A / %a | 星期几(完整/缩写) | Thursday/Thu |
%B / %b | 月份(完整/缩写) | April/Apr |
3. 对象属性与方法
class User:
def __init__(self):
self.name = "Kimi"
self.balance = 1234.5
def greeting(self):
return "Hello"
user = User()
f"{user.name:>10}" # ' Kimi'
f"{user.balance:,.2f}" # '1,234.50'
f"{user.greeting()}" # 'Hello'
七、完整组合示例
# 财务报表风格
transactions = [
("工资收入", 15000.00),
("房租支出", -4500.00),
("餐饮支出", -1234.56),
("理财收益", 256.78),
]
print(f"{'项目':<12} {'金额':>12}")
print("-" * 25)
for item, amount in transactions:
# 右对齐,千位分隔,2位小数,符号始终显示
print(f"{item:<12} {amount:>+12,.2f}")
# 输出:
# 项目 金额
# -------------------------
# 工资收入 +15,000.00
# 房租支出 -4,500.00
# 餐饮支出 -1,234.56
# 理财收益 +256.78
速查口诀
: 之后先填对齐(*>^<)
再写宽度(数字)
千位分隔(,_)
小数点精度(.n)
最后类型(bdoxXfFeEgGn%)
📌 本文是 python-basics 的专题展开。