主要观点总结
本文介绍了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]:
"""
迭代模板中的字符串部分和插值表达式。
这些可能以任意顺序出现。不包含空字符串。
"""
...
这种结构使开发者能够:
-
-
访问插值表达式及其计算结果(
interpolations
)
-
-
注:
__iter__
函数注释说出现顺序不固定,但 PEP 文档中它的具体实现却是按序的,我认为是注释有误。
t-string 与 f-string 的异同点
相似之处
-
基本语法
:二者都使用花括号
{}
作为插值表达式的分隔符
-
表达式求值
:都支持在花括号中放置任意 Python 表达式
-
格式说明符
:都支持格式说明符(如
.2f
)和转换说明符(如
!r
)
-
引号支持
:都支持所有有效的引号标记(
'
、
"
、
'''
、
"""
)
-
大小写不敏感前缀
:
t
和
T
都是有效的,就像
f
和
F
不同之处
-