 两种方式详解)
教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载字符串格式化是 Python 日常开发中使用频率最高的操作之一。本文基于 30-seconds-of-code 仓库中的 fstrings-str-format.md 技巧文档系统讲解 Python 中两种主流的字符串格式化方式——f-string格式化字符串字面量与str.format()方法并延伸介绍它们的高级格式化能力与实战用法。读完本文你将掌握两种方式的语法差异、适用场景与选择依据能够写出更简洁、更可读、更不易出错的格式化代码。文档背景这条技巧在仓库中的定位该技巧文档位于仓库的 Python 内容目录 content/snippets/python/s/fstrings-str-format.md归属于 Python 字符串集合slug 为python/string标签为string。该集合服务于 Python 3.6 及以上版本涵盖字符串格式化与操作等常用工具。同一集合中还包含 6-f-strings-tips.mdf-string 的 6 个实用技巧与 hex-to-rgb.md十六进制颜色与 RGB 互转等文章其中后者的实现正好用到了str.format()可作为本文的实战佐证。方式一f-string格式化字符串字面量格式化字符串字面量Formatted string literals俗称f-string是以f或F前缀开头的字符串字面量。这类字符串内部可以包含替换字段replacement fields用一对花括号{}包裹。f-string 中的替换字段会在求值时被自动替换为对应表达式的值因此它是三种方式中最直观、最简洁的一种。原文档给出的基础示例name John age 32 print(f{name} is {age} years old) # John is 32 years old可以看到变量直接写在花括号内代码与最终输出一一对应可读性极强。由于 f-string 在 Python 3.6 中才被引入使用时请确保运行环境满足 Python 3.6这与本仓库 Python 集合的版本定位一致。花括号内不止能放变量f-string 的替换字段中可以是任意合法表达式这正是它相比传统方式的核心优势。结合仓库中的姊妹文章 6-f-strings-tips.md我们可以延伸出以下高频用法1. 打印变量名与值调试利器在花括号内的变量名后加一个等号即可同时输出变量名与其值。注意花括号内的空白字符会被原样保留因此可以借助空格让输出更易读str_val apples num_val 42 print(f{str_val}, {num_val }) # str_valapples, num_val 422. 在花括号内直接做数学运算你可以在花括号中书写数学表达式配合还能同时打印表达式本身与计算结果num_val 42 print(f{num_val % 2 }) # num_val % 2 03. 获取值的可打印表示repr在花括号内的表达式后追加!r等价于对该值调用repr()可以快速得到其可打印表示例如字符串会带引号str_val apples print(f{str_val!r}) # applesf-string 的数字与日期格式化“f” 代表 “format”意味着 f-string 本身就是为格式化而生的。在花括号内使用冒号:后接格式说明符format specifier即可控制值的展示形式。格式说明符也可以与前面的结合使用同时打印变量名与格式化后的值。数字格式化例如用.2f将数值截取到小数点后两位注意是四舍五入price_val 6.12658 print(f{price_val:.2f}) # 6.13日期格式化日期对象同样支持格式说明符常用的占位符包括%Y完整年份、%m月份、%d日from datetime import datetime date_val datetime.utcnow() print(f{date_val:%Y-%m-%d}) # date_val2021-07-09提示datetime.utcnow()在较新的 Python 版本中已被标记为弃用建议使用datetime.now(datetime.timezone.utc)获取带时区信息的当前时间格式化语法完全一致。方式二str.format()方法str.format()的格式化能力与 f-string 非常相似核心区别在于替换字段不再写在字符串内部而是作为方法的参数传入。字符串模板中的{}占位符与参数按位置或名称对应。原文档给出的基础示例name John age 32 print({0} is {1} years old.format(name, age)) # John is 32 years old示例中使用的是位置参数{0}对应第一个参数name{1}对应第二个参数age。除了数字位置str.format()还支持以下形式关键字参数{name} is {age} years old.format(nameJohn, age32)空占位符{} is {} years old.format(name, age)按出现顺序自动匹配参数属性与下标访问{0.first_name}.format(user)、{0[0]}.format(items)。str.format()在仓库中的实战案例同属 Python 字符串集合的 hex-to-rgb.md 中RGB → Hex转换函数正是一个典型的str.format()应用——它利用{:02X}占位符构造零填充的大写十六进制格式并将模板复制三次后一次性填充三个通道值def rgb_to_hex(r, g, b): return ({:02X} * 3).format(r, g, b) rgb_to_hex(255, 165, 1) # FFA501这段代码的价值在于展示了str.format()的三个特性占位符可以携带格式说明符{:02X}表示“两位宽度、前置零、大写十六进制”模板可以动态拼接({:02X} * 3)在运行时生成{:02X}{:02X}{:02X}位置参数按序填充r、g、b依次填入三个占位符。两种方式如何选择维度f-stringstr.format()引入版本Python 3.6Python 2.6 / 3.0语法形式表达式直接内嵌于字符串占位符模板 参数传入可读性值就在字符串中直观清晰模板与参数分离长模板时较难对应延迟求值字符串创建时立即求值模板可先构造、后填充典型场景日常拼接、调试输出、日志需要复用/预定义模板、跨 Python 2 代码选择建议日常开发优先用 f-string。正如 6-f-strings-tips.md 所述f-string 比传统方式更可读、更简洁、更不易出错配合调试技巧与!r/格式说明符几乎覆盖所有格式化需求需要“模板复用”时用str.format()。例如上面rgb_to_hex的写法模板字符串可以先独立构造、按需填充在需要把格式化模板作为配置项或消息模板传递的场景如 i18n、日志模板中str.format()更为合适兼容老版本 Python 时用str.format()。若代码库需要运行在 Python 2.x 或 3.0–3.5 环境f-string 不可用此时str.format()是较好的选择。小结本文围绕 30-seconds-of-code 仓库的 fstrings-str-format.md 技巧完整讲解了 f-string 与str.format()两种字符串格式化方式的语法、区别与选择依据并结合仓库中的 6-f-strings-tips.md 与 hex-to-rgb.md 两篇同集合文章补充了变量名打印、表达式计算、repr转换、数字与日期格式化、占位符模板复用等实战用法。掌握这两种方式足以应对 Python 开发中绝大多数字符串格式化场景。赞分享教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载相关推荐Flipper Zero 如何运行拓麻歌子模拟器ROM 放置、fbt 构建到按键存档一次跑通 Tama P1Flipper Zero 如何运行拓麻歌子模拟器ROM 放置、fbt 构建到按键存档一次跑通 Tama P1 想在 Flipper Zero 上养一只示例工程WeChatMsg微信聊天记录导出完全指南3条命令导出Word并生成年度聊天报告WeChatMsg微信聊天记录导出完全指南3条命令导出Word并生成年度聊天报告 你手里最完整的数据是聊天记录也是最好用的反面跨设备搜不到、换机带不走、GameDevMind 开发者工具箱实战资源依赖检查、日志解析与性能计时三件套的源码级实现GameDevMind 开发者工具箱实战资源依赖检查、日志解析与性能计时三件套的源码级实现 导读本文以 GameDevMind 知识图谱中「二 08 开发者教程文档上一篇Ant Design数字输入框InputNumber组件高级用法下一篇如何避免重蹈覆辙Failed-ML项目中的经典机器学习失败案例解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考