跳转至

字符串格式化

你提到的内容是关于 Python 中字符串格式化的三种不同风格:%-格式化str.format() 格式化string.Template 格式化。每种风格都有其特定的语法和用途。以下是它们的详细说明和示例:


1. %-格式化(旧式格式化)

这是 Python 最早的字符串格式化方法,使用 % 操作符。它的语法类似于 C 语言中的 printf

语法:
"格式化字符串" % (值1, 值2, ...)
示例:
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() 方法传入值。

语法:
"格式化字符串".format(值1, 值2, ...)
示例:
name = "Bob"
age = 25
formatted = "Name: {}, Age: {}".format(name, age)
print(formatted)  # 输出:Name: Bob, Age: 25
高级用法:
  • 可以通过索引指定顺序:
    formatted = "Name: {0}, Age: {1}".format(name, age)
    
  • 可以通过关键字参数:
    formatted = "Name: {name}, Age: {age}".format(name=name, age=age)
    
  • 可以格式化数字:
    pi = 3.14159
    formatted = "Pi: {:.2f}".format(pi)  # 输出:Pi: 3.14
    

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
高级用法:
  • 可以使用 ${变量名} 来避免歧义:
    template = Template("Name: ${name}, Age: ${age}")
    
  • 如果缺少变量,substitute() 会抛出 KeyError,而 safe_substitute() 会忽略缺失的变量:
    formatted = template.safe_substitute(name=name)  # 输出:Name: Charlie, Age: $age
    

4. f-string 格式化(Python 3.6+)

虽然你提到的三种风格中没有提到 f-string,但它是 Python 3.6 引入的现代字符串格式化方式,推荐使用。

语法:
f"格式化字符串"
示例:
name = "David"
age = 40
formatted = f"Name: {name}, Age: {age}"
print(formatted)  # 输出:Name: David, Age: 40
高级用法:
  • 支持表达式:
    formatted = f"Next year, {name} will be {age + 1} years old."
    
  • 支持格式化数字:
    pi = 3.14159
    formatted = f"Pi: {pi:.2f}"  # 输出:Pi: 3.14
    

总结

  • %-格式化:旧式,适合简单场景。
  • str.format():灵活,支持索引和关键字参数。
  • string.Template:简单且安全,适合用户提供的模板。
  • f-string:现代、简洁且高效,推荐使用(Python 3.6+)。

根据你的需求选择合适的格式化方式即可!