Python 字符串格式化
外观
Python字符串格式化[编辑 | 编辑源代码]
Python字符串格式化是指将变量、表达式或对象的值插入到字符串中的过程。Python提供了多种字符串格式化方法,每种方法都有其特点和适用场景。本教程将详细介绍Python中的主要字符串格式化技术,包括%格式化、str.format()方法和f-strings(格式化字符串字面量)。
概述[编辑 | 编辑源代码]
字符串格式化是编程中的常见需求,它允许开发者:
- 动态构建字符串
- 控制数字的显示格式(如小数位数)
- 对齐文本
- 插入变量值到预定义模板中
Python随着版本演进,字符串格式化方法也在不断改进,目前主要有三种主流方法。
% 格式化(旧式格式化)[编辑 | 编辑源代码]
这是Python最早的字符串格式化方法,借鉴自C语言的printf风格。
基本语法[编辑 | 编辑源代码]
使用%运算符,左边是格式字符串,右边是被格式化的值(可以是单个值或元组)。
name = "Alice"
age = 25
print("My name is %s and I'm %d years old." % (name, age))
输出:
My name is Alice and I'm 25 years old.
格式说明符[编辑 | 编辑源代码]
常用格式说明符:
- %s - 字符串
- %d - 十进制整数
- %f - 浮点数
- %.2f - 保留两位小数的浮点数
示例[编辑 | 编辑源代码]
price = 19.99
quantity = 3
print("Total: $%.2f for %d items" % (price * quantity, quantity))
输出:
Total: $59.97 for 3 items
str.format() 方法[编辑 | 编辑源代码]
Python 2.6引入的更灵活的字符串格式化方法。
基本语法[编辑 | 编辑源代码]
使用花括号{}作为占位符,调用format()方法传入值。
print("{} comes before {}".format("apple", "banana"))
输出:
apple comes before banana
位置参数和关键字参数[编辑 | 编辑源代码]
可以指定位置或名称引用:
print("{1} is faster than {0}".format("turtle", "rabbit"))
print("Name: {name}, Age: {age}".format(name="Bob", age=30))
输出:
rabbit is faster than turtle Name: Bob, Age: 30
格式规范[编辑 | 编辑源代码]
可以控制对齐、填充、精度等:
print("{:<10}|{:^10}|{:>10}".format("left", "center", "right"))
print("{:.3f}".format(3.1415926))
输出:
left | center | right 3.142
f-strings(Python 3.6+)[编辑 | 编辑源代码]
格式化字符串字面量(f-string)是最新且推荐的方式,在字符串前加f前缀。
基本语法[编辑 | 编辑源代码]
直接在字符串中嵌入表达式:
name = "Charlie"
age = 28
print(f"My name is {name} and I'll be {age + 1} next year.")
输出:
My name is Charlie and I'll be 29 next year.
表达式和函数调用[编辑 | 编辑源代码]
f-string中可以包含任意有效Python表达式:
import math
print(f"π的近似值是 {math.pi:.5f}")
输出:
π的近似值是 3.14159
多行f-string[编辑 | 编辑源代码]
使用三引号创建多行f-string:
user = "admin"
is_active = True
message = f"""
User: {user}
Status: {"active" if is_active else "inactive"}
Last login: {datetime.now():%Y-%m-%d}
"""
print(message)
格式规范迷你语言[编辑 | 编辑源代码]
所有格式化方法都支持格式规范迷你语言,用于控制显示方式。
对齐与填充[编辑 | 编辑源代码]
- < - 左对齐
- > - 右对齐
- ^ - 居中对齐
- = - 填充符号和数字之间
print(f"{'title':*^20}") # 用*填充,宽度20,居中
print(f"{1234:=+10}") # 显示符号,填充=
输出:
*******title******** +=====1234
数字格式[编辑 | 编辑源代码]
- b - 二进制
- x - 十六进制
- e - 科学计数法
- % - 百分比
print(f"{255:b}") # 二进制
print(f"{0.25:.0%}") # 百分比
输出:
11111111 25%
性能比较[编辑 | 编辑源代码]
f-string通常性能最好,因为它们在编译时求值:
实际应用案例[编辑 | 编辑源代码]
案例1:生成报告[编辑 | 编辑源代码]
def generate_report(data):
header = f"{'Sales Report':^30}"
separator = "=" * 30
rows = "\n".join(
f"{item['name']:20} ${item['amount']:>7.2f}"
for item in data
)
total = sum(item['amount'] for item in data)
footer = f"\n{'Total:':20} ${total:>7.2f}"
return f"{header}\n{separator}\n{rows}{footer}"
data = [
{"name": "Product A", "amount": 1250.50},
{"name": "Product B", "amount": 750.25},
{"name": "Service C", "amount": 420.75}
]
print(generate_report(data))
输出:
Sales Report ============================== Product A $1250.50 Product B $750.25 Service C $420.75 Total: $2421.50
案例2:日志消息格式化[编辑 | 编辑源代码]
def log_event(event_type, message, severity="INFO"):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{timestamp}] [{severity:^7}] {event_type}: {message}")
log_event("AUTH", "User login successful", "INFO")
log_event("DB", "Query timeout", "WARNING")
输出:
[2023-08-15 14:30:45] [ INFO ] AUTH: User login successful [2023-08-15 14:30:45] [WARNING] DB: Query timeout
总结[编辑 | 编辑源代码]
Python字符串格式化方法比较表:
方法 | Python版本 | 优点 | 缺点 |
---|---|---|---|
%格式化 | 所有版本 | 简单,C风格熟悉 | 功能有限,易出错 |
str.format() | 2.6+ | 灵活,功能强大 | 语法稍复杂 |
f-string | 3.6+ | 简洁,高效,可读性好 | 需要Python 3.6+ |
推荐做法:
- 新项目优先使用f-string
- 需要兼容旧版本时使用str.format()
- 维护旧代码时保留%格式化
掌握字符串格式化是Python编程的基础技能,合理选择格式化方法可以使代码更清晰、更易维护。