1. % 格式化(最传统)
name = "张三"
age = 25
print("我叫%s,今年%d岁" % (name, age))
# 输出: 我叫张三,今年25岁
常用格式符:
%s - 字符串
%d - 整数
%f - 浮点数
%.2f - 保留两位小数
2. str.format() 方法(Python 2.6+)
# 位置参数
print("我叫{},今年{}岁".format("张三", 25))
# 命名参数
print("我叫{name},今年{age}岁".format(name="张三", age=25))
# 数字格式化
print("价格: {:.2f}".format(99.876)) # 保留两位小数
print("百分比: {:.1%}".format(0.876)) # 百分比格式
3. f-string(Python 3.6+ 推荐)
name = "张三"
age = 25
score = 95.5
# 基本使用
print(f"我叫{name},今年{age}岁")
# 表达式计算
print(f"明年我{age + 1}岁")
# 格式控制
print(f"分数: {score:.2f}") # 保留两位小数
print(f"分数: {score:08.2f}") # 总宽度8,不足补0
# 对齐
print(f"{'左对齐':<10}|{'居中':^10}|{'右对齐':>10}")
4. Template 字符串(安全模板)
from string import Template
template = Template("我叫$name,今年$age岁")
result = template.substitute(name="张三", age=25)
print(result) # 输出: 我叫张三,今年25岁
# safe_substitute防止缺少变量报错
safe_template = Template("欢迎$user访问")
result = safe_template.safe_substitute() # 不会报错
5. 字符串拼接和join
# 简单拼接(性能较差)
name = "张三"
result = "我叫" + name + ",今年" + str(25) + "岁"
# join方法(性能较好)
parts = ["我叫", name, ",今年", str(25), "岁"]
result = "".join(parts)
# 字符串重复
print("-" * 20) # 输出20个减号
各方法对比
| 方法 |
Python版本 |
优点 |
缺点 |
|---|
% 格式化 |
所有版本 |
简洁,类似C语言 |
类型错误风险,不够灵活 |
str.format() |
2.6+ |
功能强大,支持复杂格式化 |
语法稍复杂 |
| f-string |
3.6+ |
简洁高效,可读性好 |
需要Python 3.6+ |
Template |
所有版本 |
安全,防注入攻击 |
功能有限 |
| 字符串拼接 |
所有版本 |
简单直观 |
性能差,代码冗长 |
最佳实践建议
Python 3.6+项目:优先使用
f-string,性能好,可读性高
需要兼容旧版本:使用
str.format()
处理用户输入:考虑使用
Template 防止注入攻击
简单变量替换:f-string 或 str.format()
复杂格式化:str.format() 或 f-string
示例:各种方法的相同功能实现
name, age, score = "李四", 30, 88.456
# 1. % 格式化
print("姓名:%s, 年龄:%d, 分数:%.2f" % (name, age, score))
# 2. str.format()
print("姓名:{}, 年龄:{}, 分数:{:.2f}".format(name, age, score))
# 3. f-string(推荐)
print(f"姓名:{name}, 年龄:{age}, 分数:{score:.2f}")
# 4. Template
from string import Template
t = Template("姓名:$name, 年龄:$age, 分数:$score")
print(t.substitute(name=name, age=age, score=f"{score:.2f}"))
根据你的具体需求选择合适的格式化方法,现代Python开发中f-string是首选。