Hi~新朋友,记得点上面蓝字(网虫root)关注哟~
前言:
主要分享的是Python版本为Python3的内容。
一、 传统的 % 格式化方法
这是Python早期版本中最常用的字符串格式化方式,使用%操作符进行格式化。
🚀常用格式化符号列表
① %s 字符串格式化name = "张三"print("姓名:%s" % name) # 输出:姓名:张三② %r 使用repr()表示print("原始表示:%r" % "Hello\nWorld") # 输出:原始表示:'Hello\nWorld'③ 比较%s和%r的区别text = "特殊字符:\t制表符"print("使用%%s: %s" % text) # 输出:使用%s: 特殊字符: 制表符print("使用%%r: %r" % text) # 输出:使用%r: '特殊字符:\t制表符'
2. 字符格式化 (%c)
① 使用ASCII码print("ASCII 65是:%c" % 65) # 输出:ASCII 65是:Aprint("ASCII 97是:%c" % 97) # 输出:ASCII 97是:a② 使用Unicode码print("Unicode 20013:%c" % 20013) # 输出:Unicode 20013:中③ 直接使用字符print("字符:%c" % 'B') # 输出:字符:B
3. 整数格式化 (%d, %i, %u)
① 十进制整数num = 123print("十进制:%d" % num) # 输出:十进制:123print("有符号整数:%i" % num) # 输出:有符号整数:123print("无符号整数:%u" % num) # 输出:无符号整数:123② 处理负数negative = -42print("负数:%d" % negative) # 输出:负数:-42print("无符号负数:%u" % negative) # 输出:无符号负数:-42③ 宽度和填充print("宽度8:%8d" % 123) # 输出:宽度8: 123print("宽度8补0:%08d" % 123) # 输出:宽度8补0:00000123
4. 八进制和十六进制格式化 (%o, %x, %X)
decimal_num = 255① 八进制表示print("十进制 %d 的八进制是:%o" % (decimal_num, decimal_num)) # 输出:十进制 255 的八进制是:377print("带前缀的八进制:%#o" % decimal_num) # 输出:带前缀的八进制:0o377② 十六进制表示(小写)print("十六进制(小写):%x" % decimal_num) # 输出:十六进制(小写):ffprint("带前缀的十六进制(小写):%#x" % decimal_num) # 输出:带前缀的十六进制(小写):0xff③ 十六进制表示(大写)print("十六进制(大写):%X" % decimal_num) # 输出:十六进制(大写):FFprint("带前缀的十六进制(大写):%#X" % decimal_num) # 输出:带前缀的十六进制(大写):0XFF④ 使用不同数值for i in [10, 16, 32, 100, 255]: print("十进制:%3d → 八进制:%4o → 十六进制:%4x" % (i, i, i))
5. 浮点数格式化 (%f, %F, %e, %E, %g, %G)
import mathpi = math.pilarge_num = 1234567.89small_num = 0.000123456① %f 浮点数print("圆周率:%f" % pi) # 输出:圆周率:3.141593print("保留2位小数:%.2f" % pi) # 输出:保留2位小数:3.14print("宽度10,保留3位:%10.3f" % pi) # 输出:宽度10,保留3位: 3.142② %e 科学计数法(小写)print("科学计数法(小写):%e" % large_num) # 输出:科学计数法(小写):1.234568e+06print("科学计数法(小写),保留3位小数:%.3e" % small_num) # 输出:科学计数法(小写),保留3位小数:1.235e-04③ %E 科学计数法(大写)print("科学计数法(大写):%E" % large_num) # 输出:科学计数法(大写):1.234568E+06④ %g 自动选择格式print("自动格式(小写):%g" % large_num) # 输出:自动格式(小写):1.23457e+06print("自动格式(小写):%g" % 123.456) # 输出:自动格式(小写):123.456print("自动格式(小写):%g" % 0.000123) # 输出:自动格式(小写):0.000123⑥ %G 自动选择格式(大写)print("自动格式(大写):%G" % large_num) # 输出:自动格式(大写):1.23457E+06
6. 百分比符号 (%%)
① 输出%字符本身discount = 15print("折扣:%d%%" % discount) # 输出:折扣:15%② 浮点数百分比increase = 23.5print("增长率:%.1f%%" % increase) # 输出:增长率:23.5%③ 多个百分比rates = [10, 25, 50, 75]for rate in rates: print("进度:%d%%" % rate)
三、格式化操作符辅助指令
除了基本格式化符号,还可以使用以下辅助指令:
① 对齐和填充示例text = "Python"print("左对齐:|%-10s|" % text) # 输出:左对齐:|Python |print("右对齐:|%10s|" % text) # 输出:右对齐:| Python|print("0填充:|%010d|" % 123) # 输出:0填充:|0000000123|② 符号显示print("显示正号:%+d" % 42) # 输出:显示正号:+42print("显示正号:%+d" % -42) # 输出:显示正号:-42print("正数前空格:|% d|" % 42) # 输出:正数前空格:| 42|print("负数正常:|% d|" % -42) # 输出:负数正常:|-42|③ 使用#显示进制前缀print("带前缀八进制:%#o" % 10) # 输出:带前缀八进制:0o12print("带前缀十六进制:%#x" % 255) # 输出:带前缀十六进制:0xff④ 使用*从参数读取宽度和精度width = 12precision = 3value = 123.456789print("动态格式:%*.*f" % (width, precision, value))# 输出:动态格式: 123.457
四、str.format() 方法
Python 2.6 引入了str.format()方法,提供了更强大的格式化功能。
基础用法
① 位置参数print("{}今年{}岁,来自{}。".format("王明", 28, "北京"))② 索引参数print("{2}位于{1},是{0}的首都。".format("中国", "华北地区", "北京"))③ 关键字参数print("姓名:{name},年龄:{age},职业:{job}".format( name="张伟", age=35, job="工程师"))
五、f-string(格式化字符串字面值)
基础用法
① 简单变量插入username = "刘洋"login_time = 12print(f"用户{username}于{login_time}:00登录系统")② 表达式计算a, b = 5, 3print(f"{a} + {b} = {a + b}")print(f"{a} × {b} = {a * b}")③ 函数调用def get_temperature(): return 22.5print(f"当前温度:{get_temperature()}°C")
六、各种格式化方法对比
# 相同功能的三种实现方式product = "智能手机"brand = "小米"price = 2999.99discount = 0.15# 1. % 格式化print("%s品牌的%s原价%.2f元,折扣%.0f%%" % (brand, product, price, discount*100))# 2. str.format()print("{0}品牌的{1}原价{2:.2f}元,折扣{3:.0%}".format(brand, product, price, discount))# 3. f-stringprint(f"{brand}品牌的{product}原价{price:.2f}元,折扣{discount:.0%}")
总结
Python提供了多种字符串格式化方法,各有优缺点:
% 格式化:兼容性好,适合简单的格式化需求,但在复杂场景下不够灵活
str.format():功能强大,支持复杂格式化,语法清晰
f-string:Python 3.6+推荐使用,语法简洁,执行效率高,可读性好