`str.format()`方法因其灵活性和可读性,成为Python开发者广泛使用的格式化方式
Python字符串格式化是编程中的基础且重要的操作。str.format()方法作为Python 2.6引入的字符串格式化方式在Python 3中成为主流格式化方法之一。本报告将深入探讨str.format()方法的使用方式、语法特性、应用场景并通过丰富的代码示例展示其强大功能。1. 引言在Python编程中字符串格式化是将变量、表达式或值插入到字符串中的过程。Python提供了多种字符串格式化方法包括%操作符格式化C风格str.format()方法f-stringPython 3.6其中str.format()方法因其灵活性和可读性成为Python开发者广泛使用的格式化方式。2. str.format()基础语法str.format()方法的基本语法如下字符串{}.format(值)其中{}是占位符用于指定插入值的位置。2.1 基本用法示例# 单个占位符nameAlicegreetingHello, {}!.format(name)print(greeting)# 输出: Hello, Alice!# 多个占位符first_nameJohnlast_nameDoefull_name{} {}.format(first_name,last_name)print(full_name)# 输出: John Doe# 不同类型的数据age25height1.75info姓名: {}, 年龄: {}, 身高: {}米.format(张三,age,height)print(info)# 输出: 姓名: 张三, 年龄: 25, 身高: 1.75米3. 位置参数与索引str.format()方法支持通过索引指定参数的位置这使得参数的重用和重新排序成为可能。3.1 位置参数# 使用位置参数print({} {}.format(Hello,World))# 输出: Hello Worldprint({1} {0}.format(Hello,World))# 输出: World Helloprint({0} {1} {0}.format(Hello,World))# 输出: Hello World Hello3.2 索引重用# 重用参数template姓名: {0}, 年龄: {1}, 姓名再次: {0}resulttemplate.format(李四,30)print(result)# 输出: 姓名: 李四, 年龄: 30, 姓名再次: 李四4. 关键字参数除了位置参数str.format()还支持关键字参数使代码更具可读性。# 使用关键字参数person姓名: {name}, 年龄: {age}, 城市: {city}.format(name王五,age28,city北京)print(person)# 输出: 姓名: 王五, 年龄: 28, 城市: 北京# 混合使用位置和关键字参数mixed第一个: {0}, 第二个: {second}, 第三个: {1}.format(A,C,secondB)print(mixed)# 输出: 第一个: A, 第二个: B, 第三个: C5. 格式化规范str.format()方法提供了丰富的格式化规范可以控制数据的显示方式。5.1 数字格式化# 整数格式化print({:d}.format(42))# 输出: 42print({:5d}.format(42))# 输出: 42 (右对齐宽度为5)print({:05d}.format(42))# 输出: 00042 (用0填充宽度为5)# 浮点数格式化print({:.2f}.format(3.14159))# 输出: 3.14 (保留2位小数)print({:10.2f}.format(3.14159))# 输出: 3.14 (宽度10保留2位小数)print({:.2f}.format(3.14159))# 输出: 3.14 (显示正负号)print({:.0f}.format(3.14159))# 输出: 3 (不显示小数部分)# 百分比格式化print({:.2%}.format(0.856))# 输出: 85.60%print({:.1%}.format(0.1))# 输出: 10.0%# 科学计数法print({:.2e}.format(1234567))# 输出: 1.23e06print({:.2E}.format(1234567))# 输出: 1.23E065.2 字符串格式化# 字符串对齐textPythonprint({:10}.format(text))# 输出: Python (左对齐宽度10)print({:10}.format(text))# 输出: Python (右对齐宽度10)print({:^10}.format(text))# 输出: Python (居中对齐宽度10)print({:*^10}.format(text))# 输出: **Python** (居中用*填充)# 截断字符串long_textHello, World!print({:.5}.format(long_text))# 输出: Hello (截取前5个字符)print({:10.5}.format(long_text))# 输出: Hello (宽度10截取5个字符)5.3 进制转换# 不同进制表示number255print({:b}.format(number))# 输出: 11111111 (二进制)print({:o}.format(number))# 输出: 377 (八进制)print({:x}.format(number))# 输出: ff (十六进制小写)print({:X}.format(number))# 输出: FF (十六进制大写)print({:#b}.format(number))# 输出: 0b11111111 (带前缀的二进制)print({:#x}.format(number))# 输出: 0xff (带前缀的十六进制)6. 对象属性访问str.format()方法可以访问对象的属性和方法。# 访问对象属性classPerson:def__init__(self,name,age):self.namename self.ageage personPerson(赵六,35)info姓名: {p.name}, 年龄: {p.age}.format(pperson)print(info)# 输出: 姓名: 赵六, 年龄: 35# 访问字典键值data{name:孙七,age:40,city:上海}info姓名: {d[name]}, 年龄: {d[age]}, 城市: {d[city]}.format(ddata)print(info)# 输出: 姓名: 孙七, 年龄: 40, 城市: 上海7. 高级用法7.1 动态格式化# 动态宽度和精度width15precision3value3.1415926formatted{:{width}.{precision}f}.format(value,widthwidth,precisionprecision)print(formatted)# 输出: 3.142# 动态对齐方式alignment# 左对齐text测试result{:{}10}.format(text,alignment)print(result)# 输出: 测试 (左对齐宽度10)7.2 嵌套格式化# 嵌套格式化data[{name:Alice,score:95.5},{name:Bob,score:87.3},{name:Charlie,score:92.8}]header{:10} {:6}.format(姓名,成绩)print(header)print(-*18)foritemindata:row{:10} {:6.1f}.format(item[name],item[score])print(row)# 输出:# 姓名 成绩# ------------------# Alice 95.5# Bob 87.3# Charlie 92.87.3 日期时间格式化fromdatetimeimportdatetime nowdatetime.now()formatted_date当前时间: {:%Y-%m-%d %H:%M:%S}.format(now)print(formatted_date)# 输出: 当前时间: 2023-10-05 14:30:45 (示例)# 单独格式化日期和时间date_only日期: {:%Y年%m月%d日}.format(now)time_only时间: {:%H时%M分%S秒}.format(now)print(date_only)# 输出: 日期: 2023年10月05日print(time_only)# 输出: 时间: 14时30分45秒8. 实际应用示例8.1 生成报表# 销售报表生成sales_data[{product:产品A,quantity:100,price:25.50},{product:产品B,quantity:150,price:18.75},{product:产品C,quantity:75,price:42.00}]# 报表标题print(*50)print({:^46}.format(销售报表))print(*50)# 表头header{:10} {:8} {:10} {:12}.format(产品,数量,单价,总价)print(header)print(-*50)# 数据行total_sales0foriteminsales_data:totalitem[quantity]*item[price]total_salestotal row{:10} {:8} {:10.2f} {:12.2f}.format(item[product],item[quantity],item[price],total)print(row)print(-*50)print({:42}.format(总计: {:.2f}.format(total_sales)))print(*50)8.2 日志格式化importloggingfromdatetimeimportdatetime# 自定义日志格式classCustomFormatter(logging.Formatter):defformat(self,record):log_format[{asctime}] [{levelname:8}] {message}.format(asctimeself.formatTime(record,datefmt%Y-%m-%d %H:%M:%S),levelnamerecord.levelname,messagerecord.getMessage())returnlog_format# 配置日志loggerlogging.getLogger(__name__)logger.setLevel(logging.DEBUG)handlerlogging.StreamHandler()handler.setFormatter(CustomFormatter())logger.addHandler(handler)# 使用日志logger.info(系统启动)logger.warning(内存使用率超过80%)logger.error(数据库连接失败)9. 与其他格式化方法比较9.1 与%操作符比较# %操作符格式化nameAliceage25old_style姓名: %s, 年龄: %d%(name,age)# str.format()格式化new_style姓名: {}, 年龄: {}.format(name,age)# f-string格式化 (Python 3.6)f_stringf姓名:{name}, 年龄:{age}print(old_style)# 输出: 姓名: Alice, 年龄: 25print(new_style)# 输出: 姓名: Alice, 年龄: 25print(f_string)# 输出: 姓名: Alice, 年龄: 259.2 优缺点分析str.format()的优点语法清晰易于阅读支持位置参数和关键字参数提供丰富的格式化选项可以重用参数支持对象属性访问str.format()的缺点相比f-string语法稍显冗长性能略低于f-string10. 最佳实践选择合适的格式化方法对于简单场景f-string更简洁对于复杂场景或需要动态构建格式字符串时str.format()更灵活。使用关键字参数提高可读性当参数较多时使用关键字参数可以使代码更易理解。注意性能在循环中频繁使用字符串格式化时考虑性能影响。处理异常确保提供的参数数量和类型与占位符匹配避免运行时错误。国际化考虑对于多语言应用考虑使用专门的国际化库。11. 结论str.format()方法是Python中强大而灵活的字符串格式化工具。它提供了丰富的格式化选项支持位置参数、关键字参数、对象属性访问等特性适用于各种字符串格式化需求。虽然Python 3.6引入的f-string在某些场景下更简洁但str.format()仍然因其灵活性和向后兼容性而在Python编程中占据重要地位。掌握str.format()方法的使用能够帮助开发者编写更清晰、更灵活的代码提高开发效率和代码质量。在实际项目中根据具体需求选择合适的字符串格式化方法是Python开发者应具备的基本技能。

相关新闻

Ubuntu22.04下双ROS互通搭建指南

Ubuntu22.04下双ROS互通搭建指南

双ROS互通这事,看起来简单,真做起来踩坑的人不在少数。标题是“Ubuntu22.04下双ROS互通简单搭建”,说明核心需求很明确:在海量ROS学习资料满天飞的今天,很多人装了ROS,却很少能真正把两台机器上的ROS节点跑…

2026/9/30 11:21:20 阅读更多 →
拖拽式视觉开发:工业视觉检测的低代码实战指南

拖拽式视觉开发:工业视觉检测的低代码实战指南

工业视觉这行干久了,大家私下交流时经常聊到一个现象:十年前搭一套视觉检测系统,从相机选型、光源调试到算法编写、界面开发,一个项目没个把月根本下不来,而且还得是那种既能写 C 又能调硬件的全栈工程师。但现在不一样…

2026/9/30 11:21:20 阅读更多 →
台式机/笔记本怎么用另一台笔记本做屏幕/扩展屏?——「小白教程」

台式机/笔记本怎么用另一台笔记本做屏幕/扩展屏?——「小白教程」

删改自: ​笔记本电脑给主机当显示器怎么做?先判断接口再选可行方案 方法一:确认笔记本是否支持视频输入 真不能认为笔记本有块屏幕有接口能显示外部画面,笔记本上接口大多也支持负责输出而非输入,但也有少数个例&am…

2026/9/30 11:20:19 阅读更多 →

最新新闻

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询 【免费下载链接】science-skills GDM Science Skills to speed up agentic scientific workflows with better grounding and higher token efficiency. Integrate ins…

2026/9/30 16:45:26 阅读更多 →
英飞凌TC264卡丁快跑:PMSM电机控制与GTM定时器实战解析

英飞凌TC264卡丁快跑:PMSM电机控制与GTM定时器实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
格西烽火:可编程串口协议解析引擎与变量驱动调试平台

格西烽火:可编程串口协议解析引擎与变量驱动调试平台

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
VMware虚拟机安装与使用全攻略:避坑指南与网络配置详解

VMware虚拟机安装与使用全攻略:避坑指南与网络配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
专利撰写实战:从权利要求书到说明书的核心技巧解析

专利撰写实战:从权利要求书到说明书的核心技巧解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果

treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果

treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/treg/treg treg 是一个面向 …

2026/9/30 16:44:21 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/30 15:27:04 阅读更多 →