1. 课题导入
在 Python 编程中,将变量嵌入字符串进行输出是常见需求。早期版本主要依赖 % 运算符,虽然现代 Python 推荐使用 f-string 或 format(),但理解 % 运算符对于维护旧代码及掌握底层原理依然重要。
【任务】使用字符串拼接法原样输出:圆周率是 3.1415926
# 声明变量 pi 用于存储圆周率
pi =
((pi))
( + (pi))
Python 字符串格式化 % 运算符详解。涵盖类型码 %s/%d/%f 用法,精度控制 .precision,宽度与对齐 flags 参数设置。包含字典与元组格式化示例,对比现代 f-string 写法,解析常见错误及最佳实践。

在 Python 编程中,将变量嵌入字符串进行输出是常见需求。早期版本主要依赖 % 运算符,虽然现代 Python 推荐使用 f-string 或 format(),但理解 % 运算符对于维护旧代码及掌握底层原理依然重要。
【任务】使用字符串拼接法原样输出:圆周率是 3.1415926
# 声明变量 pi 用于存储圆周率
pi =
((pi))
( + (pi))
【终端输出】
<class 'float'>
圆周率是 3.1415926
字符串和整数、浮点数类型不能直接拼接。因此只有用 str() 将浮点数 pi 转换成字符串才能拼接。用 str() 函数转换数据类型比较麻烦,转换前还要先判断要转换对象的数据类型,且仅能实现转换的功能。
Python 中还提供了其他较为方便的字符串格式化方法,% 运算符便是其中之一。
基本语法:'%(参数)' % (对象)
第一个 % 是占位符,必须在字符串内。
第二个 % 是格式化关键字。
参数共有 5 个:4 个可选参数,1 个必选参数。
格式为:%%[name][flags][width].[precision]typecode
温馨提示:
.precision精准度参数前必须有点.。
typecode 即类型码,是必选参数,不能省略。
作用:控制显示的类型。
%s:显示字符串类型。将整数或浮点数格式化为字符串,作用相当于 str()。%d:显示整数类型(十进制)。%f:显示浮点数类型。pi = 3.1415926
print('圆周率是 %s' % pi)
【终端输出】
圆周率是 3.1415926
pi 变量的数据类型是浮点数。原本不能和字符串 '圆周率是' 进行拼接。但通过 %s 直接将 pi 格式化后就能和字符串进行拼接了。
%d 将浮点数转换成十进制整数,仅保留浮点数的整数部分,没有四舍五入功能。
pi = 3.1415926
# 将浮点数用%d转换成十进制整数
print('圆周率是 %d' % pi)
a = 3.9415926
print('数值是 %d' % a)
【终端输出】
圆周率是 3
数值是 3
上述两个变量的值是不一样的,一个是 3.1...另一个是 3.9...但 %d 只保留整数部分,因此输出结果都为 3。
此外,%d 也可用于进制转换展示:
# 将十六进制数 15 转换为十进制数
hex_val = 0x15
print('十六进制 0x15 转十进制:%d' % hex_val)
# 将八进制数 0o17 转换为十进制数
oct_val = 0o17
print('八进制 0o17 转十进制:%d' % oct_val)
【终端输出】
十六进制 0x15 转十进制:21
八进制 0o17 转十进制:15
%f 将整数或浮点数转换成浮点数,默认保留小数点后 6 位。
# 整数转换
num = 3
print('整数转浮点:%f' % num)
# 浮点数转换
pi1 = 3.1415926
pi2 = 3.14
print('原始浮点:%f' % pi1)
print('原始浮点:%f' % pi2)
【终端输出】
整数转浮点:3.000000
原始浮点:3.141593
原始浮点:3.140000
不管 pi 原本有多少位小数点,转换后小数点后都有 6 位。原本的小数点位数大于 6 则四舍五入,取 6 位;原本的小数点位数小于 6 则保留原有的位数,后面不够的位数用 0 补齐。
注意:
%f具有四舍五入功能。
name 是可选参数,通常用在比较复杂的字典格式化中。(答案 1)(答案 2)(答案 3) 就是 name 参数。
采用 name 这种格式化,可以灵活、方便地进行一些自动化工作,如自动出题、批量处理或验证数据。
math = '''
0.77, 8 , 'Mike'中数据类型为字符串的是%(answer1)s
0.77, 8 , 'Mike'中数据类型为整数的是%(answer2)d
0.77, 8 , 'Mike'中数据类型为浮点数的是%(answer3)f
''' % {'answer1':'Mike', 'answer2':8, 'answer3':0.77}
print(math)
【终端输出】
0.77, 8 , 'Mike'中数据类型为字符串的是 Mike
0.77, 8 , 'Mike'中数据类型为整数的是 8
0.77, 8 , 'Mike'中数据类型为浮点数的是 0.770000
观察第三行输出的是 0.770000,%f 格式化后并不是我们要的答案,我们可以利用后面的参数来进行优化。
.precision 是可选参数。
pi = 3.1415926
# 通过设置.precision 参数来控制浮点数的精度
print('圆周率是%.1f' % pi) # 保留 1 位小数点
print('圆周率是%.2f' % pi) # 保留 2 位小数点
print('圆周率是%.3f' % pi) # 保留 3 位小数点
print('圆周率是%.4f' % pi) # 保留 4 位小数点
print('圆周率是%.5f' % pi) # 保留 5 位小数点
【终端输出】
圆周率是 3.1
圆周率是 3.14
圆周率是 3.142
圆周率是 3.1416
圆周率是 3.14159
优化之前的字典示例:
math = '''
0.77, 8 , 'Mike'中数据类型为字符串的是%(answer1)s
0.77, 8 , 'Mike'中数据类型为整数的是%(answer2)d
0.77, 8 , 'Mike'中数据类型为浮点数的是%(answer3).2f
''' % {'answer1':'Mike', 'answer2':8, 'answer3':0.77}
print(math)
【终端输出】
0.77, 8 , 'Mike'中数据类型为字符串的是 Mike
0.77, 8 , 'Mike'中数据类型为整数的是 8
0.77, 8 , 'Mike'中数据类型为浮点数的是 0.77
通过设置 .precision 参数(.2)来控制浮点数的精度,就得到了我们原本需要的答案。
result = '张三,恭喜你通过考试!'
print('%.2s' % result)
【终端输出】
张三
height = 168
# 没有 flags 和 width 参数时,默认右对齐
print('身高是%scm。' % height)
# flags=+,width=10,右对齐,168 左侧添加空格占位
print('身高是%+10scm。' % height)
# flags=-,width=20,左对齐,168 右侧添加空格占位
print('身高是%-10scm。' % height)
# flags=0,width=6,右对齐,168 右侧添加 0 占位,总位数为 5 位
print('身高是%05dcm。' % height)
【终端输出】
身高是 168cm。
身高是 168cm。
身高是 168 cm。
身高是 00168cm。
Flags 详细说明:
-:左对齐。+:在数字前显示正负号(正数也显示 +)。 :在数字前显示空格(正数显示空格,负数显示 -)。0:在数字前填充 0(通常用于数字)。^:居中对齐(需配合 width 使用)。除了单个值,% 运算符还支持元组和字典作为右侧操作数。
当右侧是元组时,占位符按顺序匹配。
name = 'Alice'
age = 25
salary = 15000.50
print('%s 今年%d岁,月薪%.2f 元' % (name, age, salary))
【终端输出】
Alice 今年 25 岁,月薪 15000.50 元
当右侧是字典时,占位符使用 %(key)s 形式。
user = {
'username': 'Bob',
'level': 3,
'score': 98.5
}
print('用户 %(username)s 等级为%(level)d,分数为%(score).1f' % user)
【终端输出】
用户 Bob 等级为 3,分数为 98.5
虽然 % 运算符经典,但在 Python 3.6+ 中,f-string 更为推荐。
| 特性 | % 运算符 | str.format() | f-string |
|---|---|---|---|
| 语法 | 'Hello %s' % name | 'Hello {}'.format(name) | f'Hello {name}' |
| 性能 | 较慢 | 中等 | 最快 |
| 可读性 | 一般 | 较好 | 最好 |
| 表达式支持 | 弱 | 强 | 强 |
f-string 示例:
name = 'Charlie'
age = 30
print(f'{name} 今年{age}岁')
print(f'计算结果:{10 + 20}')
TypeError。
# 错误示例
print('%d' % 'abc') # TypeError
# 推荐
print('Value: %d' % (10,))
%。本文详细介绍了 Python 中 % 字符串格式化运算符的使用方法。掌握了类型码(%s, %d, %f)、精度控制(.precision)、宽度与对齐(flags, width)以及字典与元组的映射机制。尽管现代 Python 开发更倾向于使用 f-string,但理解 % 运算符有助于阅读和维护遗留代码,并深入理解字符串格式化的底层逻辑。在实际开发中,建议根据项目版本选择最合适的格式化方式。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online