上一篇
Python3字符串格式化输出完全指南 | 从入门到精通
- Python
- 2025-07-23
- 543
Python3字符串格式化输出完全指南
掌握%操作符、str.format()和f-strings三种格式化方法
Python字符串格式化简介
Python提供了多种字符串格式化方法,每种方法都有其适用场景:
%操作符(旧式)
类似C语言的printf风格,在Python2中广泛使用,现在主要用于兼容旧代码。
str.format()(新式)
Python2.6引入,提供了更灵活和强大的格式化功能。
f-strings(字面量)
Python3.6引入,语法简洁高效,是目前推荐的方法。
%操作符格式化
使用%操作符是最早的字符串格式化方法,格式为:"格式化字符串" % 值
基本用法示例
# 字符串和整数格式化
name = "Alice"
age = 30
print("姓名: %s, 年龄: %d" % (name, age))
# 浮点数格式化
pi = 3.1415926
print("PI的值: %.2f" % pi) # 保留两位小数
# 十六进制格式化
num = 255
print("255的十六进制: %x" % num) # 输出 ff
常用格式说明符
| 说明符 | 含义 | 示例 |
|---|---|---|
| %s | 字符串 | "Name: %s" % "Bob" |
| %d | 十进制整数 | "Age: %d" % 25 |
| %f | 浮点数 | "Price: %.2f" % 99.95 |
| %x | 十六进制整数 | "Hex: %x" % 255 |
str.format()方法
str.format()方法提供了更灵活、更强大的字符串格式化功能,支持位置参数和关键字参数。
基本用法示例
# 位置参数
print("{} 的年龄是 {} 岁".format("Alice", 30))
# 关键字参数
print("姓名: {name}, 分数: {score}".format(name="Bob", score=95))
# 混合使用
print("{1} 的 {0} 成绩是 {score} 分".format("数学", "小明", score=90))
# 数字格式化
print("PI值: {:.3f}".format(3.1415926)) # 保留3位小数
print("科学计数法: {:.2e}".format(0.001234)) # 1.23e-03
# 宽度和对齐
print("{:>10}".format("右对齐")) # 宽度10,右对齐
print("{:^10}".format("居中")) # 宽度10,居中
print("{:<10}".format("左对齐")) # 宽度10,左对齐
高级格式化示例
# 填充字符
print("{:*^20}".format("标题")) # 居中,宽度20,用*填充
# 千位分隔符
print("{:,}".format(1000000)) # 输出 1,000,000
# 百分比
print("{:.1%}".format(0.875)) # 输出 87.5%
# 访问对象属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 25)
print("姓名: {p.name}, 年龄: {p.age}".format(p=p))
f-strings(格式化字符串字面值)
f-strings是Python3.6引入的新特性,在字符串前加f或F前缀,可以直接在字符串内嵌入表达式。
基本用法示例
name = "Alice"
age = 30
print(f"姓名: {name}, 年龄: {age}")
# 表达式计算
a = 5
b = 10
print(f"{a} + {b} = {a + b}")
# 函数调用
def greet(name):
return f"Hello, {name.title()}!"
print(greet("bob"))
# 字典访问
user = {"name": "Tom", "score": 95}
print(f"用户: {user['name']}, 分数: {user['score']}")
格式化选项
# 数字格式化
pi = 3.1415926
print(f"PI值: {pi:.3f}") # 保留3位小数
print(f"科学计数法: {0.001234:.2e}") # 1.23e-03
# 宽度和对齐
print(f"{'右对齐':>10}") # 宽度10,右对齐
print(f"{'居中':^10}") # 宽度10,居中
print(f"{'左对齐':<10}") # 宽度10,左对齐
# 填充字符
print(f"{'标题':*^20}") # 居中,宽度20,用*填充
# 千位分隔符
print(f"{1000000:,}") # 输出 1,000,000
# 百分比
print(f"{0.875:.1%}") # 输出 87.5%
数字格式化详解
整数格式化
# 十进制
print(f"{42:d}") # 42
# 二进制
print(f"{10:b}") # 1010
# 八进制
print(f"{10:o}") # 12
# 十六进制
print(f"{255:x}") # ff (小写)
print(f"{255:X}") # FF (大写)
浮点数格式化
# 固定小数位数
print(f"{3.1415926:.2f}") # 3.14
# 总宽度和小数位数
print(f"{3.1415926:8.3f}") # 3.142
# 科学计数法
print(f"{1000000:.2e}") # 1.00e+06
# 百分比
print(f"{0.75:.1%}") # 75.0%
对齐与填充
| 对齐方式 | 语法 | 示例 | 输出 |
|---|---|---|---|
| 左对齐 | :<宽度 | f'{"text":<10}' | 'text ' |
| 右对齐 | :>宽度 | f'{"text":>10}' | ' text' |
| 居中对齐 | :^宽度 | f'{"text":^10}' | ' text ' |
| 自定义填充 | :填充字符^宽度 | f'{"text":*^10}' | '***text***' |
综合示例
# 表格数据格式化
headers = ["产品", "价格", "库存"]
data = [
("笔记本", 5999.99, 120),
("手机", 3999.50, 85),
("平板", 2999.00, 60)
]
# 打印表头
print(f"{headers[0]:<10} | {headers[1]:>10} | {headers[2]:>10}")
print("-" * 35)
# 打印数据行
for product, price, stock in data:
print(f"{product:<10} | ¥{price:>9.2f} | {stock:>10d}")
# 输出结果:
# 产品 | 价格 | 库存
# -----------------------------------
# 笔记本 | ¥5999.99 | 120
# 手机 | ¥3999.50 | 85
# 平板 | ¥2999.00 | 60
日期和时间格式化
from datetime import datetime
now = datetime.now()
# 使用strftime格式化
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2023-10-15 14:30:45
# 使用f-strings(Python 3.6+)
print(f"{now:%Y-%m-%d %H:%M:%S}") # 同上
# 常用日期格式
print(f"当前日期: {now:%Y年%m月%d日}")
print(f"当前时间: {now:%H:%M:%S}")
print(f"星期简写: {now:%a}")
print(f"星期全称: {now:%A}")
print(f"月份简写: {now:%b}")
print(f"月份全称: {now:%B}")
# 组合使用
print(f"{now:%Y-%m-%d} ({now:%A})")
常用日期格式代码
- %Y:四位年份(2023)
- %y:两位年份(23)
- %m:月份(01-12)
- %d:日(01-31)
- %H:24小时制小时(00-23)
- %I:12小时制小时(01-12)
- %M:分钟(00-59)
- %S:秒(00-59)
- %a:星期简写(Mon)
- %A:星期全称(Monday)
- %b:月份简写(Jan)
- %B:月份全称(January)
- %p:AM/PM
最佳实践与总结
选择哪种格式化方法?
- Python 3.6+:优先使用f-strings,语法简洁,性能好
- Python 2.6-3.5:使用str.format()方法
- 旧代码维护:%操作符只建议在维护旧代码时使用
- 国际化:考虑使用gettext模块进行国际化处理
性能比较
在大多数情况下,三种方法的性能差异可以忽略不计。但在需要高性能的场景下:
- f-strings通常是最快的,因为它们在编译时解析
- str.format()次之
- %操作符在Python3中稍慢
总结建议
- 新项目优先使用f-strings(Python 3.6+)
- 格式化规范(宽度、精度、对齐等)在三种方法中基本一致
- 复杂格式化考虑使用模板字符串或第三方库(如jinja2)
- 用户输入格式化要谨慎,避免安全漏洞
- 日志记录建议使用%操作符或str.format()以兼容旧Python版本
掌握字符串格式化,提升Python编码效率
合理使用字符串格式化可以使你的代码更简洁、更易读、更专业!
本文由XiahouLuanWei于2025-07-23发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://521pj.cn/20256333.html
发表评论