Python字符串格式化全面指南:f-string与常用方法详解
本文系统讲解f-string的核心用法及与其他字符串格式化方法的对比。内容涵盖基础到高级应用,并附带实战代码示例。
一、f-string基础篇:简洁高效的字符串嵌入
f-string(格式化字符串字面值)是Python 3.6+引入的核心特性,以 f 或 F 为前缀,通过 {} 直接嵌入变量或表达式。
1. 基础语法与变量嵌入
name = "小明"
age = 18
print(f"姓名:{name},年龄:{age}") # 输出:姓名:小明,年龄:18
优势:无需类型占位符(如 %s),代码更简洁。
2. 表达式与函数调用
支持在 {}
内执行运算或调用函数:
import math
print(f"圆的面积:{math.pi * 3**2:.2f}") # 输出:圆的面积:28.27
# 注意:表达式会在运行时实时求值。
二、f-string进阶篇:精细控制输出格式
1. 数值格式化
通过格式说明符(Format Specifiers)控制精度、对齐等:
price = 19.99999
# 保留两位小数 + 千位分隔符
print(f"总价:{price * 1000:,.2f}元") # 输出:总价:19,999.99元
# 右对齐(宽度10)
print(f"价格:{price:>10.2f}") # 输出:价格: 20.00
常用符号:
:.2f:保留两位小数
:>10:右对齐,宽度10
:,:千位分隔符
2. 日期与特殊类型格式化
结合 datetime 模块自定义时间格式:
from datetime import datetime
now = datetime.now()
print(f"当前时间:{now:%Y-%m-%d %H:%M:%S}") # 输出:2025-03-19 14:30:00
3. 调试技巧:表达式与变量名输出
Python 3.8+
支持 = 符号,输出变量名及值:
x = 100
print(f"{x=}") # 输出:x=100
三、其他字符串格式化方法对比
1. % 格式化(经典方法)
name = "Yant"
print("姓名:%s,年龄:%d" % (name, 18)) # 输出:姓名:Yant,年龄:18
# 适用场景:旧代码维护,但可读性较差。
2. str.format() 方法
支持位置参数与关键字参数,灵活性更高:
print("商品:{0},价格:{1:.2f}".format("苹果", 5.5)) # 输出:商品:苹果,价格:5.50
3. 模板字符串(安全场景)
适用于处理用户输入(防止代码注入):
from string import Template
t = Template("姓名:$name,年龄:$age")
print(t.substitute(name="小红", age=16)) # 输出:姓名:小红,年龄:16
四、最佳实践与场景选择
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
f-string | 简洁高效、支持表达式 | 仅限Python 3.6+ | 新项目开发、复杂格式化 |
str.format() | 兼容性好、支持复杂格式 | 语法较冗长 | 需要兼容旧版本的项目 |
% 格式化 | 简单快速 | 类型安全性差 | 快速脚本或旧代码维护 |
模板字符串 | 安全性高 | 功能有限 | 用户输入处理、国际化场景 |
五、实战案例:生成销售报表
sales_data = [
{"product": "键盘", "price": 299.0, "quantity": 5},
{"product": "鼠标", "price": 89.9, "quantity": 10}
]
# 动态计算对齐宽度
max_width = max(len(item["product"]) for item in sales_data)
# 生成表格
print(f"{'商品':<{max_width}} {'单价':>10} {'数量':>8} {'小计':>12}")
for item in sales_data:
total = item["price"] * item["quantity"]
print(f"{item['product']:<{max_width}} {item['price']:>10.2f} {item['quantity']:>8} {total:>12.2f}")
输出示例:
商品 单价 数量 小计
键盘 299.00 5 1495.00
鼠标 89.90 10 899.00
六、总结与建议
1. 优先使用f-string:语法简洁、性能优异,适合大多数场景。
2. 注意版本兼容性:确保运行环境支持Python 3.6+(f-string)或3.8+(调试符号=)。
3. 灵活选择方法:根据安全性需求(如用户输入)或兼容性要求选择其他方式。
通过掌握这些技巧,您可以轻松应对字符串格式化的各类需求,提升代码可读性与开发效率!