pin_drop当前位置:知识文库 ❯ 图文

Python百分号格式化

百分号(%)格式化是Python最早的字符串格式化方式,借鉴自C语言的printf格式。虽然如今有了format()和f-string等更现代的方式,但百分号格式化在旧代码中仍然广泛存在,理解它对阅读和维护遗留代码至关重要。本篇教程将详细介绍%格式化的各种占位符、宽度和精度控制等内容。


基本用法

百分号格式化的基本语法为:"格式字符串" % (值1, 值2, ...)

代码示例

name = "张三"
age = 25
print("姓名:%s,年龄:%d岁" % (name, age))

当只有一个值时,可以省略括号:

代码示例

print("你好,%s" % "世界")

格式化符号

常用占位符

符号 含义 示例
%s 字符串 "你好,%s" % "Python" → 你好,Python
%d 整数 "数量:%d" % 10 → 数量:10
%f 浮点数 "价格:%f" % 3.14 → 价格:3.140000
%r 原始表示(repr) "值:%r" % "hi" → 值:'hi'
%c 单个字符 "字母:%c" % 65 → 字母:A
%o 八进制整数 "八进制:%o" % 8 → 八进制:10
%x 十六进制(小写) "十六进制:%x" % 255 → 十六进制:ff
%X 十六进制(大写) "十六进制:%X" % 255 → 十六进制:FF
%e 科学计数法(小写e) "科学:%e" % 1000 → 科学:1.000000e+03
%E 科学计数法(大写E) "科学:%E" % 1000 → 科学:1.000000E+03
%% 输出百分号本身 "比例:%%" % () → 比例:%

代码示例

代码示例

print("字符串: %s" % "Hello")
print("整数: %d" % 42)
print("浮点数: %f" % 3.14159)
print("字符: %c" % 65)
print("八进制: %o" % 64)
print("十六进制: %x" % 255)
print("科学计数: %e" % 12345.6789)
print("百分号: 100%%")

宽度和精度

宽度控制

使用%Nd指定整数的最小宽度,不足时用空格填充:

代码示例

print("[%5d]" % 42)
print("[%05d]" % 42)
print("[%-5d]" % 42)
格式 含义 输出
%5d 宽度5,右对齐 [ 42]
%05d 宽度5,用0填充 [00042]
%-5d 宽度5,左对齐 [42 ]

精度控制

使用%.Nf指定浮点数的小数位数:

代码示例

print("默认: %f" % 3.14159)
print("两位小数: %.2f" % 3.14159)
print("四位小数: %.4f" % 3.14159)
print("无小数: %.0f" % 3.14159)

宽度和精度组合

使用%M.Nf同时指定宽度和精度(M为总宽度,N为小数位数):

代码示例

print("[%8.2f]" % 3.14159)
print("[%-8.2f]" % 3.14159)
print("[%08.2f]" % 3.14159)
格式 含义 输出
%8.2f 总宽8,2位小数,右对齐 [ 3.14]
%-8.2f 总宽8,2位小数,左对齐 [3.14 ]
%08.2f 总宽8,2位小数,0填充 [00003.14]

字符串宽度和精度

代码示例

print("[%10s]" % "Hi")
print("[%-10s]" % "Hi")
print("[%.3s]" % "Python")
格式 含义 输出
%10s 宽度10,右对齐 [ Hi]
%-10s 宽度10,左对齐 [Hi ]
%.3s 截取前3个字符 [Pyt]

代码示例

综合运用百分号格式化:

代码示例

print("=" * 40)
print("%-15s %8s %8s" % ("商品", "单价", "数量"))
print("-" * 40)
print("%-15s %8.2f %8d" % ("苹果", 5.50, 10))
print("%-15s %8.2f %8d" % ("香蕉", 3.80, 20))
print("%-15s %8.2f %8d" % ("橙子", 6.20, 15))
print("-" * 40)
total = 5.50 * 10 + 3.80 * 20 + 6.20 * 15
print("%-15s %8.2f" % ("合计", total))

pi = 3.14159265358979
print("\n圆周率的不同精度表示:")
print("2位: %.2f" % pi)
print("6位: %.6f" % pi)
print("10位: %.10f" % pi)
print("科学计数: %.4e" % pi)

注意事项

提示:百分号格式化是Python最早的格式化方式,在新代码中推荐使用f-string

提示%s可以格式化任何类型,它会自动调用str()转换

提示%d只能格式化整数,传入浮点数会截断小数部分

提示:多个占位符时,值必须用元组包裹,且数量要匹配

提示:输出百分号本身需要使用%%

提示:宽度控制中的负号表示左对齐,零表示用0填充


小结

本篇教程详细介绍了Python百分号格式化的用法,包括各种占位符(%s%d%f等)、宽度和精度控制,以及对齐和填充方式。虽然百分号格式化在新代码中已不推荐使用,但理解它对于阅读旧代码和维护遗留项目仍然非常重要。


练习题

练习1

使用百分号格式化输出以下信息:姓名(字符串,左对齐,宽度8)、年龄(整数,右对齐,宽度4)、成绩(浮点数,保留1位小数,右对齐,宽度6)。自行设定数据。

练习2

使用百分号格式化将数字 255 分别以十进制、八进制、十六进制(大小写)和科学计数法的形式输出。

常见问题

百分号格式化和format()有什么区别?

百分号格式化是Python最早的格式化方式,语法借鉴自C语言的printf。format()方法更灵活,支持位置参数、关键字参数和复杂的格式规范。在新代码中推荐使用f-string,其次是format()。

%s和%d有什么区别?

%s可以格式化任何类型,它会自动调用str()将值转换为字符串。%d只能格式化整数,如果传入浮点数会截断小数部分,传入字符串则会报错。

如何在格式化字符串中输出百分号本身?

需要使用%%来表示一个普通的百分号字符。例如"完成度:%d%%" % 80会输出"完成度:80%"。

%.2f和%5.2f有什么区别?

%.2f只指定小数位数为2位,不限制总宽度。%5.2f指定总宽度为5(包含小数点),小数位数为2位,如果数值不够5个字符会在左边填充空格。

多个占位符时必须用元组吗?

是的,当有多个占位符时,值必须用元组包裹(用小括号),且数量要与占位符匹配。如果只有一个占位符,可以省略括号。

小贴士

百分号格式化虽然是最古老的Python字符串格式化方式,但在维护旧代码时仍然经常遇到。%s是最通用的占位符,它可以处理任何类型。如果你需要精确控制输出格式(如表格对齐),宽度和精度控制非常有用。记住:在新项目中推荐使用f-string,它更简洁、更高效。

标签: 百分号格式化 字符串格式化 占位符 宽度控制 精度控制 Python基础

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python字符串拼接 下一篇: Python format方法格式化

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。