上一篇
Python3字符串格式化输出完全指南 | 从入门到精通
- Python
- 2025-07-23
- 298
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发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256333.html
发表评论