PEP 750 – 模板字符串 | peps.python.org

这是关于 Python 中模板字符串(Template Strings)的 PEP(Python Enhancement Proposal)750 的详细内容总结:

  • 作者及讨论信息:由 Jim Baker、Guido van Rossum 等多人参与,讨论地址为Discourse thread,状态为 Accepted,类型为 Standards Track,创建于 08-Jul-2024,适用于 Python-Version 3.14,包含详细的帖子历史记录。
  • 目录内容:包含 Abstract(摘要)、Relationship With Other PEPs(与其他 PEP 的关系)、Motivation(动机)、Specification(规范)、Examples(示例)、Backwards Compatibility(向后兼容性)、Security Implications(安全影响)、How To Teach This(如何教授)、Why another templating approach?(为何采用另一种模板方法)、Common Patterns Seen in Processing Templates(处理模板的常见模式)、Reference Implementation(参考实现)、Rejected Ideas(被拒绝的想法)、Acknowledgements(致谢)和 Copyright(版权)等部分。
  • 各部分详细内容

    • Abstract:引入用于自定义字符串处理的模板字符串,是 f-strings 的推广,使用t前缀,求值为Template类型,提供对字符串及其插值值的访问,可用于多种场景。
    • Relationship With Other PEPs:基于 PEP 701,是 PEP 501 的更新和简化,PEP 501 曾因 f-strings 的出现而被推迟,后重新开始工作并引入t-strings
    • Motivation:f-strings 存在局限性,如无法拦截和转换插值值,可能导致安全漏洞,模板字符串则解决了这些问题,提供了对字符串和插值值的访问。
    • Specification

      • Template String Literals:引入新字符串前缀t,解析为Template类型,支持 f-string 的语法,可嵌套和使用多种引号,tT前缀均可,不能与ub前缀组合,也不能与 f-strings 组合,但可与r前缀组合。
      • The Template TypeTemplate是一个新的不可变类型,包含strings(字符串部分)和interpolations(插值部分)属性,以及values属性、__iter__方法等。
      • The Interpolation Type:表示模板字符串中的表达式,是一个新的类,包含value(求值结果)、expression(原始文本)、conversion(可选转换)和format_spec(格式规范)属性。
      • The Template.values Property:是访问interpolationsvalue属性的快捷方式。
      • Iterating Template Contents__iter__方法可用于遍历模板的内容,包括字符串部分和插值部分。
      • Processing Template Strings:开发者可以编写任意代码处理模板字符串,没有特定的处理方式要求。
      • Template String Concatenation:支持使用+进行显式和隐式的模板字符串连接,但禁止Templatestr的隐式连接。
      • Template and Interpolation EqualityTemplateInterpolation实例通过对象身份进行比较。
      • No Support for OrderingTemplateInterpolation类型不支持排序。
      • Support for the debug specifier (=):支持在模板字符串中使用=调试规范,行为与 f-strings 类似但有细微差别。
      • Raw Template Strings:支持使用rt(或tr)前缀的原始模板字符串,\n等特殊字符按原始形式处理。
      • Interpolation Expression Evaluation:插值的表达式求值与 f-strings 相同,模板字符串从左到右急切求值。
      • Exceptions:t-string 字面量中的异常与 f-string 字面量中的异常相同。
      • No Template.__str__() ImplementationTemplate类型没有专门的__str__实现,而是提供有用的__repr__实现。
      • The string.templatelib Modulestring模块将转换为包含TemplateInterpolation类型的templatelib子模块。
    • Examples:提供了多个使用模板字符串的示例,包括实现 f-strings、结构化日志记录(两种方法)和 HTML 模板等,所有示例的参考实现都在pep750-examples仓库中。
    • Backwards Compatibility:使用模板字符串与以前的版本存在语法上的向后不兼容性。
    • Security Implications:处理模板字符串时的安全影响与 f-strings 相似,代码应确保插值的安全处理。
    • How To Teach This:模板字符串有多个受众,开发者应了解模板字符串的求值类型、与其他字符串格式化方法的关系等,框架作者可以利用模板字符串构建新工具。
    • Why another templating approach?:虽然已有成熟的模板语言,但 PEP 750 旨在将模板处理逻辑融入 Python 语言,满足前端开发的需求。
    • Common Patterns Seen in Processing Templates:介绍了处理模板的常见模式,如结构模式匹配、备忘录、解析为中间表示、上下文敏感处理插值、嵌套模板字符串、延迟评估、异步评估、模板重用和与格式字符串的关系等。
    • Reference Implementation:CPython 实现的 PEP 750 可在[https://github.com/lysnikolao...]获取,还有相关的示例和测试仓库[https://github.com/davepeck/p...]。
    • Rejected Ideas:记录了在 PEP 开发过程中被拒绝的一些想法,包括任意字符串字面量前缀、延迟评估插值、将TemplateInterpolation制成协议、重写__eq____hash__、额外的Decoded类型、Template的最终归属、完全重建原始模板字面量、禁止模板连接、任意转换值、删除Interpolation中的conversion、交替插值符号、Template的交替布局、描述模板“种类”的机制和二进制模板字符串等。
    • Acknowledgements:感谢 Ryan Morshead、Dropbox 的[pyxl]、Andrea Giammarchi 和 Joachim Viide 等人的贡献。
    • Copyright:文档置于公共领域或 CC0-1.0-Universal 许可证下。
阅读 74
0 条评论