Python format 格式化函数(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Python 开发中,数据格式化是一个高频需求。无论是构建用户友好的输出界面,还是生成结构化的日志文件,甚至是处理复杂的金融计算,掌握 format() 函数都能显著提升代码的可读性和功能性。本文将系统性地解析 format() 函数的核心机制,并通过大量实战案例,帮助读者从基础语法到高级技巧全面掌握这一工具。


一、基础语法:占位符的魔法

1.1 格式化字符串的诞生

Python 的 format() 函数通过 占位符(placeholder)实现数据嵌入。最简单的形式是:

text = "Hello, {}!".format("World")  
print(text)  # 输出:Hello, World!  

这里 {} 是一个空占位符,通过 .format() 方法传递参数后,参数会按顺序填充进占位符中。

1.2 参数与位置的映射

占位符可以显式指定参数位置,避免顺序依赖:

sentence = "第{1}位用户 {0} 在{2}登录".format("Alice", 100, "2023-09-20")  
print(sentence)  # 输出:第100位用户 Alice 在2023-09-20登录  

这种灵活性在需要复用参数或调整输出顺序时非常实用。


二、进阶用法:格式说明符的控制

2.1 格式说明符的结构

{} 内,通过 : 分隔参数索引和格式说明符(format specifier),例如:

number = 123.4567  
formatted = "{:.2f}".format(number)  
print(formatted)  # 输出:123.46  

这里 .2f 表示保留两位小数的浮点数格式。

2.2 常见数值格式化场景

a. 浮点数精度控制

print("{:.2f}".format(123.456))  # 123.46  

print("{:.2f}".format(123.4))    # 123.40  

b. 整数的进制转换

decimal = 255  
print("十进制:{}".format(decimal))        # 255  
print("二进制:{0:b}".format(decimal))    # 11111111  
print("十六进制:{0:x}".format(decimal))  # ff  

c. 百分比格式化

ratio = 0.75  
print("{:.0%}".format(ratio))  # 75%  

三、对齐与填充:让输出更整洁

3.1 基本对齐规则

通过 <>^ 控制文本对齐方向:

text = "Python"  
print("|{:<10}|".format(text))  # 左对齐,总宽度10 → |Python    |  
print("|{:^10}|".format(text))  # 居中对齐 → |  Python   |  
print("|{:>10}|".format(text))  # 右对齐 → |    Python|  

3.2 填充字符的扩展

默认填充为空格,可替换为其他字符(如 =0):

print("编号:{:0>5}".format(42))  # 编号:00042  

print("{:=^20}".format(" 销售报表 "))  # =====销售报表=====  

四、格式化复杂数据类型

4.1 字典与对象的键访问

通过 []. 访问对象属性或字典键值:

user = {"name": "Bob", "age": 30}  
print("姓名:{name}, 年龄:{age}".format(**user))  # 姓名:Bob, 年龄:30  

class Person:  
    def __init__(self, name):  
        self.name = name  
person = Person("Charlie")  
print("用户:{.name}".format(person))  # 用户:Charlie  

4.2 列表与元组的索引访问

items = ["apple", "banana", "cherry"]  
print("第二个元素:{[1]}".format(items))  # 第二个元素:banana  

五、格式化函数的进阶技巧

5.1 格式化嵌套

通过多层占位符实现复杂结构:

report = (  
    "销售数据:\n"  
    " - 总额:{total:.2f} 元\n"  
    " - 利润率:{profit:.1%}\n"  
    "   - 员工:{employee[name]}\n"  
    "   - 部门:{employee[department]}".format(  
        total=12345.678,  
        profit=0.25,  
        employee={"name": "David", "department": "Sales"}  
    )  
)  
print(report)  

输出结果:

销售数据:
 - 总额:12345.68 元
 - 利润率:25.0%
   - 员工:David
   - 部门:Sales

5.2 格式化日期与时间

结合 datetime 模块实现日期格式化:

from datetime import datetime  

now = datetime.now()  
print("当前时间:{:%Y-%m-%d %H:%M:%S}".format(now))  

六、与 f-string 的对比与选择

6.1 f-string 的语法优势

Python 3.6 引入的 f-string(格式化字符串字面值)在语法上更简洁:

name = "Eva"  
age = 25  
print(f"用户 {name} 的年龄是 {age} 岁")  # 用户 Eva 的年龄是 25 岁  

6.2 格式化函数的适用场景

尽管 f-string 更简洁,但 format() 函数在以下场景更具优势:

  1. 动态占位符:当需要根据变量名动态生成占位符时;
  2. 复杂嵌套:处理多层嵌套结构时,format() 的参数传递更直观;
  3. 兼容性:在旧版 Python(<3.6)中,format() 是唯一选择。

七、常见问题与解决方案

7.1 "Format specifier needs more arguments" 错误

当占位符数量超过传递的参数时会触发此错误:

print("{0} {1}".format("仅传入一个参数"))  # 报错!  

解决方法:确保参数数量与占位符匹配。

7.2 处理特殊字符(如 {}

若需在字符串中直接显示 {},可用 {{}} 转义:

print("价格:{{ price }} 元".format())  # 输出:价格:{ price } 元  

八、实战案例:构建财务报表

8.1 需求描述

生成一份包含金额、百分比、日期的财务报告:

from datetime import datetime  

data = {  
    "revenue": 1234567.89,  
    "cost": 456789.12,  
    "profit_ratio": 0.65,  
    "report_date": datetime.now()  
}  

report = (  
    "财务报告:{report_date:%Y年%m月%d日}\n"  
    "总收入:{revenue:,.2f} 元\n"  
    "总成本:{cost:,.2f} 元\n"  
    "净利润率:{profit_ratio:.0%}\n"  
    "-----------------------\n"  
    "净收入:{:.2f} 元".format(  
        data["revenue"] - data["cost"],  
        **data  
    )  
)  

print(report)  

输出示例:

财务报告:2023年09月20日  
总收入:1,234,567.89 元  
总成本:456,789.12 元  
净利润率:65%  
-----------------------  
净收入:777,778.77 元  

结论

Python format 格式化函数是一个功能强大且灵活的工具,其核心在于 占位符语法格式说明符 的组合应用。无论是基础的字符串拼接,还是复杂的财务报表生成,通过本文的系统性讲解,读者可以逐步掌握从简单到复杂的格式化技巧。建议读者通过实际项目不断练习,例如开发日志记录系统、生成数据报告等场景,以深化对 format() 函数的理解。

掌握这些技能后,开发者不仅能写出更优雅的代码,还能显著提升输出内容的可读性和专业性——这正是 Python format 格式化函数赋予我们的强大能力。

最新发布