pin_drop当前位置:知识文库 ❯ 图文
Python format方法格式化
str.format()方法是Python 2.6引入的字符串格式化方式,相比百分号格式化更加强大和灵活。它支持位置参数、关键字参数、属性访问、索引访问等多种特性,并提供了丰富的格式规范迷你语言。本篇教程将全面介绍format()方法的各种用法。
基本用法
位置参数
使用{}作为占位符,按顺序传入参数:
代码示例
result = "{} {} {}".format("Python", "是", "最好的")
print(result)
result = "{0} {1} {2}".format("Python", "是", "最好的")
print(result)
result = "{2} {1} {0}".format("语言", "的", "最好")
print(result)
result = "{0} {0} {1}".format("你好", "世界")
print(result)提示:不指定索引时,按顺序填充;指定索引时,可以重复使用或调整顺序。
关键字参数
使用命名参数,通过名称引用:
代码示例
result = "{name}今年{age}岁".format(name="张三", age=25)
print(result)
result = "姓名:{name},城市:{city}".format(name="李四", city="北京")
print(result)混合使用
位置参数和关键字参数可以混合使用,但位置参数必须在关键字参数之前:
代码示例
result = "{0}叫{name},今年{1}岁".format("他", 25, name="王五")
print(result)格式规范
format()方法支持在{}内使用格式规范语法:{[字段名]:[格式规范]}
填充与对齐
代码示例
print("{:>10}".format("Python"))
print("{:<10}".format("Python"))
print("{:^10}".format("Python"))
print("{:*^10}".format("Python"))数字格式化
代码示例
print("{:d}".format(42))
print("{:f}".format(3.14159))
print("{:.2f}".format(3.14159))
print("{:+.2f}".format(3.14159))
print("{:.0f}".format(3.14159))进制转换
代码示例
num = 255
print("二进制: {:b}".format(num))
print("八进制: {:o}".format(num))
print("十进制: {:d}".format(num))
print("十六进制: {:x}".format(num))
print("十六进制: {:X}".format(num))千位分隔符
代码示例
print("{:,}".format(1234567890))
print("{:_}".format(1234567890))百分比格式
代码示例
ratio = 0.8567
print("{:.2%}".format(ratio))数字格式化
科学计数法
代码示例
num = 12345.6789
print("{:e}".format(num))
print("{:.2e}".format(num))
print("{:E}".format(num))宽度和精度组合
代码示例
print("{:8.2f}".format(3.14159))
print("{:08.2f}".format(3.14159))
print("{:+8.2f}".format(3.14159))
print("{:-8.2f}".format(-3.14159))对齐与填充
综合示例
代码示例
data = [
("苹果", 5.50, 10),
("香蕉", 3.80, 20),
("橙子", 6.20, 15),
]
print("{:^10}{:>8}{:>8}".format("商品", "单价", "数量"))
print("-" * 26)
for name, price, qty in data:
print("{:^10}{:>8.2f}{:>8d}".format(name, price, qty))访问属性和索引
代码示例
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("张三", 25)
print("姓名:{0.name},年龄:{0.age}".format(p))
data = ["Python", "Java", "C++"]
print("第一:{0[0]},第二:{0[1]}".format(data))代码示例
综合运用format方法:
代码示例
print("=" * 50)
print("学生成绩单".center(50))
print("=" * 50)
students = [
("张三", 85.5, "A"),
("李四", 92.3, "A+"),
("王五", 67.8, "C"),
("赵六", 78.0, "B"),
]
header = "{:<8}{:>10}{:>8}".format("姓名", "成绩", "等级")
print(header)
print("-" * 30)
for name, score, grade in students:
row = "{:<8}{:>10.1f}{:>8}".format(name, score, grade)
print(row)
print("-" * 30)
avg = sum(s[1] for s in students) / len(students)
print("平均成绩:{:.1f}".format(avg))
pi = 3.14159265358979
print("\n圆周率格式化:")
print("默认: {}".format(pi))
print("2位小数: {:.2f}".format(pi))
print("科学计数: {:.4e}".format(pi))
print("百分比: {:.2%}".format(pi / 10))注意事项
提示:
format()方法中,{}内的索引从0开始提示:位置参数和关键字参数混合使用时,位置参数必须在前
提示:格式规范中,填充字符、对齐方式和宽度必须按顺序书写
提示:
{}中的索引不能超出参数范围,否则会报IndexError提示:在Python 3.6+中,推荐使用f-string替代format方法
小结
本篇教程全面介绍了str.format()方法的用法,包括位置参数、关键字参数、格式规范(填充、对齐、宽度、精度)、数字格式化(进制转换、科学计数法、千位分隔符、百分比)等。format()方法比百分号格式化更灵活强大,但在Python 3.6+中,f-string通常是更好的选择。
练习题
练习1
使用format()方法输出一个整齐的表格,包含以下数据:商品名称(居中,宽度8)、单价(右对齐,保留2位小数,宽度8)、库存(右对齐,宽度6)。数据自行设定。
练习2
使用format()方法将数字 2024 分别以二进制、八进制、十六进制输出,并使用居中对齐,宽度12,用-填充。
常见问题
format()方法中的索引是什么意思?
format()方法中的{}可以使用数字索引来引用传入的参数。{0}表示第一个参数,{1}表示第二个参数,以此类推。不写索引时按顺序自动填充。索引可以重复使用,也可以调整顺序。
如何在使用format()时实现居中对齐?
使用^符号实现居中对齐,例如"{:^10}".format("Python")会将"Python"居中显示在10个字符宽度中。配合填充字符可以使用"{:*^10}".format("Python"),用*填充空白部分。
format()可以访问对象的属性吗?
可以。使用{0.name}的语法可以访问第一个参数的name属性,{0[0]}可以访问第一个参数的第一个索引元素。这在格式化复杂数据结构时非常有用。
千位分隔符怎么用?
使用{:,}可以使用逗号作为千位分隔符,例如"{:,}".format(1234567890)会输出"1,234,567,890"。也可以使用{:_}使用下划线作为分隔符。
format()和f-string哪个更好?
在Python 3.6+中,f-string更简洁、性能更好、可读性更强。format()的主要优势是兼容旧版本Python。如果你的项目使用Python 3.6+,建议优先使用f-string。
小贴士
format()方法的格式规范迷你语言非常强大,除了本文中介绍的功能外,还支持日期时间格式化、自定义格式等高级用法。了解format()的完整规范有助于你处理各种复杂的字符串格式化需求。不过记住,在Python 3.6+中,f-string通常是更好的选择。
本文涉及AI创作
内容由AI创作,请仔细甄别