文章
合集Python 语言基础第 3 / 21 篇

f-string 的格式控制符

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/ef"{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'
rrepr() 表示f"{obj!r}" 或 f"{obj!r:20}"
aascii() 表示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'

常用日期符号

符号含义示例
%Y4 位年份2026
%m2 位月份04
%d2 位日期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 的专题展开。