字符串格式化
你提到的内容是关于 Python 中字符串格式化的三种不同风格:%-格式化、str.format() 格式化 和 string.Template 格式化。每种风格都有其特定的语法和用途。以下是它们的详细说明和示例:
1. %-格式化(旧式格式化)¶
这是 Python 最早的字符串格式化方法,使用 % 操作符。它的语法类似于 C 语言中的 printf。
语法:¶
示例:¶
name = "Alice"
age = 30
formatted = "Name: %s, Age: %d" % (name, age)
print(formatted) # 输出:Name: Alice, Age: 30
常用占位符:¶
%s:字符串%d:整数%f:浮点数%x:十六进制整数
2. str.format() 格式化(新式格式化)¶
这是 Python 2.6 引入的格式化方法,使用 {} 作为占位符,并通过 format() 方法传入值。
语法:¶
示例:¶
name = "Bob"
age = 25
formatted = "Name: {}, Age: {}".format(name, age)
print(formatted) # 输出:Name: Bob, Age: 25
高级用法:¶
- 可以通过索引指定顺序:
- 可以通过关键字参数:
- 可以格式化数字:
3. string.Template 格式化(模板字符串)¶
string.Template 是一种更简单的字符串格式化方式,使用 $ 作为占位符前缀。它适合处理用户提供的模板,因为它的功能较为有限,安全性较高。
语法:¶
from string import Template
template = Template("格式化字符串")
formatted = template.substitute(变量1=值1, 变量2=值2, ...)
示例:¶
from string import Template
name = "Charlie"
age = 35
template = Template("Name: $name, Age: $age")
formatted = template.substitute(name=name, age=age)
print(formatted) # 输出:Name: Charlie, Age: 35
高级用法:¶
- 可以使用
${变量名}来避免歧义:
- 如果缺少变量,
substitute()会抛出KeyError,而safe_substitute()会忽略缺失的变量:
4. f-string 格式化(Python 3.6+)¶
虽然你提到的三种风格中没有提到 f-string,但它是 Python 3.6 引入的现代字符串格式化方式,推荐使用。
语法:¶
示例:¶
name = "David"
age = 40
formatted = f"Name: {name}, Age: {age}"
print(formatted) # 输出:Name: David, Age: 40
高级用法:¶
- 支持表达式:
- 支持格式化数字:
总结¶
%-格式化:旧式,适合简单场景。str.format():灵活,支持索引和关键字参数。string.Template:简单且安全,适合用户提供的模板。- f-string:现代、简洁且高效,推荐使用(Python 3.6+)。
根据你的需求选择合适的格式化方式即可!