第一代:% 格式化(远古)

name = "WadeLy"
age = 30
"我叫 %s, 今年 %d 岁" % (name, age)
# '我叫 WadeLy, 今年 30 岁'

C 语言风格,%s(字符串)、%d(整数)、%f(浮点)。今天只在维护老代码时遇到。

第二代:.format() 方法

"我叫 {}, 今年 {} 岁".format(name, age)
"我叫 {0}, 今年 {1} 岁".format(name, age)        # 用下标
"我叫 {name}, 今年 {age} 岁".format(name=name, age=age)  # 关键字

% 易读,但还是啰嗦。

第三代:f-string(Python 3.6+,今天的标准)

直接在引号前加个 f

f"我叫 {name}, 今年 {age} 岁"
# '我叫 WadeLy, 今年 30 岁'

花括号里可以放任何表达式

f"明年 {age + 1} 岁"
f"姓名长度: {len(name)}"
f"大写: {name.upper()}"

f-string 的格式规范

冒号后面写格式:

pi = 3.14159265
f"{pi:.2f}"       # '3.14'        保留 2 位小数
f"{pi:.0f}"       # '3'
f"{1234567:,}"    # '1,234,567'   千分位
f"{0.85:.1%}"     # '85.0%'       百分比
f"{42:>10}"       # '        42'  右对齐宽 10
f"{42:<10}"       # '42        '  左对齐
f"{42:^10}"       # '    42    '  居中
f"{42:0>5}"       # '00042'       前补零

调试用法(Python 3.8+)

变量名和值一起打印:

x = 42
print(f"{x=}")       # 'x=42'
print(f"{x*2=}")     # 'x*2=84'

排查问题时神器。

一句话总结

今天写代码只用 f-string。 %.format() 看得懂就行。

下一篇讲输入输出的进阶用法。