Python format()函数高级字符串格式化详解

Python format()函数高级字符串格式化详解

文章目录

Python format()函数高级字符串格式化详解

format()是Python中功能强大的字符串格式化工具,它提供了比传统%格式化更灵活、更强大的方式来处理字符串格式化。下面我将从基础到高级全面讲解format()函数的使用方法。

一、format()函数基础用法

1. 基本语法

"模板字符串".format(参数1, 参数2,...)

2. 三种基本使用方式

(1) 位置参数
print("{}的{}成绩是{}".format("张三","数学",95))# 输出: 张三的数学成绩是95
(2) 索引参数
print("{0}的{2}成绩是{1}".format("张三",95,"数学"))# 输出: 张三的数学成绩是95
(3) 命名参数
print("{name}的{subject}成绩是{score}".format( name="李四", subject="英语", score=88))# 输出: 李四的英语成绩是88

二、数字格式化

1. 基本数字格式化语法

"{:[填充][对齐][符号][宽度][,][.精度][类型]}".format(数字)

2. 常用数字格式化示例

格式化需求格式字符串示例代码输出结果
保留2位小数{:.2f}"{:.2f}".format(3.14159)3.14
千分位分隔{:,}"{:,}".format(1234567)1,234,567
百分比显示{:.2%}"{:.2%}".format(0.4567)45.67%
十六进制{:x}"{:x}".format(255)ff
二进制{:b}"{:b}".format(10)1010
科学计数法{:.2e}"{:.2e}".format(123456)1.23e+05

3. 对齐与填充

格式化需求格式字符串示例代码输出结果
右对齐(默认){:10}"{:10}".format(123) 123
左对齐{:<10}"{:<10}".format(123)123
居中对齐{:^10}"{:^10}".format(123) 123
用0填充{:010}"{:010}".format(123)0000000123
用*填充{:*^10}"{:*^10}".format(123)***123****
# 综合示例:银行金额显示 amount =1234567.8912print("账户余额: {:,.2f}元".format(amount))# 输出: 账户余额: 1,234,567.89元

三、字符串格式化

1. 字符串对齐与截断

格式化需求格式字符串示例代码输出结果
右对齐{:>10}"{:>10}".format("hello") hello
左对齐{:<10}"{:<10}".format("hello")hello
居中对齐{:^10}"{:^10}".format("hello")hello
截断字符串{:.3}"{:.3}".format("hello")hel

2. 填充与对齐结合

# 表格格式化示例 data =[("苹果",5.5,10),("香蕉",3.2,8),("橙子",4.8,15)]for item in data:print("{:<8} 单价: {:>5.2f}元 库存: {:03d}".format(*item))# 输出:# 苹果 单价: 5.50元 库存: 010# 香蕉 单价: 3.20元 库存: 008# 橙子 单价: 4.80元 库存: 015

四、高级格式化技巧

1. 访问对象属性

classPerson:def__init__(self, name, age): self.name = name self.age = age p = Person("王五",30)print("{0.name}今年{0.age}岁".format(p))# 输出: 王五今年30岁

2. 访问字典元素

data ={"name":"赵六","score":92}print("学生{name}的成绩是{score}".format(**data))# 输出: 学生赵六的成绩是92

3. 访问列表元素

items =["手机","电脑","平板"]print("产品1: {0[0]}, 产品2: {0[1]}".format(items))# 输出: 产品1: 手机, 产品2: 电脑

4. 动态格式化

# 根据条件动态设置格式for num in[123,12345,1234567]:print("{:{align}{width},}".format(num, align=">", width=10))# 输出:# 123# 12,345# 1,234,567

五、特殊格式化

1. 大括号转义

# 显示大括号本身print("{{}}是format使用的括号".format())# 输出: {}是format使用的括号

2. 日期时间格式化

from datetime import datetime now = datetime.now()print("{:%Y-%m-%d %H:%M:%S}".format(now))# 输出: 2023-08-15 14:30:45 (当前时间)

3. 自定义格式化

classTemperature:def__init__(self, celsius): self.celsius = celsius def__format__(self, format_spec):if format_spec =="f":returnf"{self.celsius *9/5+32:.1f}°F"returnf"{self.celsius:.1f}°C" temp = Temperature(25)print("温度: {:f}".format(temp))# 输出: 温度: 77.0°Fprint("温度: {}".format(temp))# 输出: 温度: 25.0°C

六、性能比较

1. 各种格式化方式对比

格式化方式Python版本可读性性能功能
%格式化所有版本一般有限
str.format()2.6+强大
f-string3.6+最好最快强大

2. 何时使用format()

✅ 适合场景:

  • Python 2.6到3.5版本
  • 需要复用格式模板
  • 复杂的格式化需求
  • 需要动态格式字符串

❌ 不适合场景:

  • Python 3.6+简单格式化(用f-string更好)
  • 极高性能要求的场景

七、实际应用案例

案例1:生成报表

# 销售报表生成 sales_data =[("笔记本电脑",12,5999.99),("智能手机",25,3999.50),("平板电脑",8,2999.00)]# 表头print("{:<15} {:>10} {:>15} {:>15}".format("产品名称","销售数量","单价","总金额"))print("-"*60)# 表格内容for product, quantity, price in sales_data: total = quantity * price print("{:<15} {:>10d} {:>15,.2f} {:>15,.2f}".format( product, quantity, price, total))# 输出示例:# 产品名称 销售数量 单价 总金额# ------------------------------------------------------------# 笔记本电脑 12 5,999.99 71,999.88# 智能手机 25 3,999.50 99,987.50# 平板电脑 8 2,999.00 23,992.00

案例2:日志格式化

deflog_message(level, message): timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print("[{:<5}] {:<20} {}".format(level, timestamp, message)) log_message("INFO","系统启动完成") log_message("ERROR","文件打开失败")# 输出示例:# [INFO ] 2023-08-15 14:45:30 系统启动完成# [ERROR] 2023-08-15 14:46:12 文件打开失败

八、总结

format()函数核心要点:

  1. 基本用法:位置参数{}、索引参数{0}、命名参数{name}
  2. 数字格式化:
    • 精度控制:{:.2f}
    • 千分位:{:,}
    • 对齐填充:{:0>10}
  3. 字符串格式化:对齐{:<10}、截断{:.5}
  4. 高级特性:
    • 访问对象属性{obj.attr}
    • 动态格式{:{width}}
    • 自定义__format__方法
  5. 特殊格式:日期时间、大括号转义

format()提供了Python中最强大、最灵活的字符串格式化能力,特别适合需要复杂格式控制的场景。虽然Python 3.6+引入了更简洁的f-string,但在需要复用格式模板或兼容旧版本Python时,format()仍然是不可或缺的工具。

Read more

Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案

Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案 前言 在鸿蒙(OpenHarmony)生态的万物互联、极繁交互中台、以及对数据获取灵活性有极致要求的现代应用研发中,“高效的数据检索协议”是应用响应速度的灵魂。面对复杂的社交网络关系查询、实时的行情推送、或是海量状态信息的聚合。如果仅仅依靠传统的 RESTful 接口,那么不仅会导致因为 Over-fetching(获取多余数据)导致的带宽浪费,更会因为频繁的 API 版本演进引入严重的跨端兼容性碎片化问题。 我们需要一种“按需检索、逻辑解耦”的交互艺术。 graphql 是一套专为 Flutter 设计的标准 GraphQL 客户端套件。它通过构建规范的规范化缓存(Normalized Cache)与极其灵活的连接链路(Links)

By Ne0inhk
解决:OpenClaw启动报错:unauthorized: gateway password missing (enter the password in Control UI settings)

解决:OpenClaw启动报错:unauthorized: gateway password missing (enter the password in Control UI settings)

解决:OpenClaw启动报错:unauthorized: gateway password missing (enter the password in Control UI settings) * 一·问题描述: * 1.使用`openclaw gateway`或`openclaw gateway --auth password`两个命令,均能够在终端启动成功 * 2.访问控制UI界面:http://127.0.0.1:18789/,界面有红色字体报错 * 3.配置文件`openclaw.json`的`gateway`配置如下 * 二·问题原因:没有在UI控制界面再次配置OpenClaw密码 * 三·解决方案: * 四·验证:成功对话

By Ne0inhk
微服务链路追踪实战:SkyWalking vs Zipkin 架构深度解析与性能优化指南

微服务链路追踪实战:SkyWalking vs Zipkin 架构深度解析与性能优化指南

目录 1. 链路追踪:分布式系统的“X光机” 1.1 从单体到微服务:排查困境的演变 1.2 链路追踪的核心价值矩阵 2. 核心原理解析:Trace、Span与上下文传播 2.1 基本概念:一次请求的完整“病历” 2.2 上下文传播:Trace ID的“接力赛” 2.3 采样算法:平衡精度与开销的智慧 3. SkyWalking深度解析:无侵入监控的艺术 3.1 架构全景:从Agent到UI的完整链路 3.2 字节码增强:Java Agent的魔法 3.3 生产环境配置模板 3.4 性能特性与调优 4.

By Ne0inhk
Rust异步Web框架Axum的深入原理与高级用法

Rust异步Web框架Axum的深入原理与高级用法

Rust异步Web框架Axum的深入原理与高级用法 一、Axum框架的架构与核心组件 1.1 Axum框架的设计理念 💡Axum是基于Tokio异步运行时的Rust Web框架,由Tokio团队官方维护,具有以下核心设计理念: 1. 模块化与可扩展性:通过中间件、请求提取器和响应映射器等组件,实现高度模块化的架构,允许开发者根据需求灵活组合功能。 2. 类型安全:利用Rust的类型系统确保请求处理逻辑的正确性,减少运行时错误。 3. 异步优先:完全基于Tokio异步运行时,充分利用现代硬件的并发能力。 4. 低门槛:提供简单易用的API,同时保持足够的灵活性,适合不同经验水平的开发者。 1.2 Axum框架的核心组件 1.2.1 请求提取器 请求提取器负责从HTTP请求中提取所需的数据,如路径参数、查询参数、请求体等。Axum提供了多种内置的请求提取器,并允许开发者自定义提取器。 内置请求提取器示例: useaxum::{extract::Path,response::IntoResponse,routing::get,

By Ne0inhk