淄博市文章资讯

Python实现字符串格式化的五种方法

2026-03-25 10:08:01 浏览次数:2
详细信息

1. % 格式化(最传统)

name = "张三"
age = 25
print("我叫%s,今年%d岁" % (name, age))
# 输出: 我叫张三,今年25岁

常用格式符:

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是首选。

相关推荐