专栏名称: 码小辫
给程序员和编程爱好者分享计算机编程电子书以及相关的学习资源
目录
相关文章推荐
辽宁应急管理  ·  高考加油!辽宁省应急管理厅送出安全提示! ·  昨天  
募格学术  ·  湖北2所高校领导班子调整 ·  昨天  
研之成理  ·  钙钛矿,Nature ... ·  3 天前  
辽宁应急管理  ·  高考加油!辽宁省应急管理厅送出安全提示! ·  昨天  
51好读  ›  专栏  ›  码小辫

Python 3.14 t-string 要来了,它与 f-string 有何不同?

码小辫  · 公众号  ·  · 2025-04-30 17:10

主要观点总结

本文介绍了Python中t-string语法的特点和使用场景,对比了其与f-string的差异,阐述了t-string在字符串处理中的优势和安全性。

关键观点总结

关键观点1: t-string语法是Python 3.14中新增的一种字符串处理方式,提供了更灵活、更安全的字符串插值处理机制。

t-string允许开发者在字符串组合前对插值进行拦截和转换,避免了常见的安全问题,并支持更多高级用例。

关键观点2: t-string与f-string的异同点。

t-string和f-string都有基本语法和表达式求值特点,但t-string返回的是Template类型,提供延迟求值能力,允许访问原始模板的结构,而f-string是即时完成的。

关键观点3: t-string的应用场景。

包括安全的HTML模板、SQL查询构建、结构化日志记录、子进程调用等。此外,还可以自定义多功能模板渲染器、处理结构化嵌套模板、支持延迟求值与异步处理等。


正文

请到「今天看啥」查看全文




# 同一个模板,不同的输出格式
print(standard_renderer(template)) # 输出: 用户 Python猫 的年龄是 18
print(json_renderer(template)) # 输出: {"name": "Python猫", "age": 18}
print(xml_renderer(template)) # 输出: \n Python猫 \n 18 \n

这种灵活性是 f-string 所不具备的,对于构建各种 DSL(领域特定语言)、模板引擎或格式化系统非常有价值。

Template 类的结构

t-string 求值后的 Template 类具有以下主要属性和方法:

class Template:
    strings: tuple[str, ...]
    """
    模板中字符串部分的非空元组。
    包含 N+1 个元素,其中 N 是模板中插值表达式的数量。
    """


    interpolations: tuple[Interpolation, ...]
    """
    模板中插值部分的元组。
    如果没有插值表达式,这将是一个空元组。
    """


    def __new__(cls, *args: str | Interpolation):
        """
        创建一个新的 Template 实例。
        参数可以按任意顺序提供。
        """

        ...

    @property
    def values(self) -> tuple[object, ...]:
        """
        返回模板中每个 Interpolation 的 `value` 属性组成的元组。
        如果没有插值表达式,这将是一个空元组。
        """

        ...

    def __iter__(self) -> Iterator[str | Interpolation]:
        """
        迭代模板中的字符串部分和插值表达式。
        这些可能以任意顺序出现。不包含空字符串。
        """

        ...

这种结构使开发者能够:

  • 访问原始字符串片段( strings

  • 访问插值表达式及其计算结果( interpolations

  • 直接获取所有插值的值( values

  • 按顺序迭代模板的所有组成部分

注: __iter__ 函数注释说出现顺序不固定,但 PEP 文档中它的具体实现却是按序的,我认为是注释有误。

t-string 与 f-string 的异同点

相似之处

  1. 基本语法 :二者都使用花括号 {} 作为插值表达式的分隔符
  2. 表达式求值 :都支持在花括号中放置任意 Python 表达式
  3. 格式说明符 :都支持格式说明符(如 .2f )和转换说明符(如 !r
  4. 引号支持 :都支持所有有效的引号标记( ' " ''' """ )
  5. 大小写不敏感前缀 t T 都是有效的,就像 f F

不同之处

  1. 返回类型 :f-string 直接返回 str






请到「今天看啥」查看全文