Python 括号连字符和三引号连字符的差异
date
Mar 30, 2025
slug
the-difference-between-brackets-and-trilpe-quotation-marks
status
Published
tags
Dev
Python
summary
type
Post
引言
从第一次接触 Python 起,就知道如果使用多行文本,就采用 “”” 包裹起来,而且长久以来,通过代码编写 LLM
Prompt 也是使用”””,就像下面那样:
但刚刚在看 OpenAI Agents SDK 的 Samples 时,发现它使用的是()拼接的语法,即
遂好奇两者差异点。
一番了解后,这两种写法不仅仅是表现上的语法差异,实际上它们产生的字符串内容和使用场景有着显著不同。
核心差异:空白处理机制
两种方式的优缺点
实际应用场景
适合使用括号连接的场景
- API 提示词:与 API 交互的提示词,其中空白可能影响结果
- 简单消息模板:不需要特定格式的简单文本模板
- 命令行参数:需要精确控制的命令行参数或 SQL 查询
适合使用三引号的场景
- 格式化文本:包含特定格式的文本,如 Markdown、HTML
- 多层引号:包含多种引号的复杂文本
- 配置模板:需要保留结构的配置文件模板
最佳实践:结合两种方法的优点
对于需要多行编辑便利性但又不想包含多余空白的情况,可以结合使用三引号和
textwrap.dedent()
函数:这种方法:
- 使用三引号提供良好的编辑体验
- 通过
dedent()
移除共同的前导空白
- 使用
strip()
移除首尾的换行符
性能考虑
在性能方面,两种方法没有显著差异:
- 括号连接在编译时完成
- 三引号方式的额外处理(如
dedent()
和strip()
)在运行时开销极小
对于大多数应用场景,选择哪种方法应该基于可读性和维护性,而非性能考虑。
总结
选择多行字符串的定义方式应考虑以下因素:
- 如果格式不重要,内容简单:使用括号连接方式
- 如果需要保留格式或包含复杂引号:使用三引号方式
- 如果需要编辑便利性但不要多余空白:使用三引号 +
dedent()
+strip()
在处理 AI 提示词、模板字符串或配置文件时,明智地选择多行字符串的定义方式可以提高代码的可读性和可维护性,减少潜在的空白字符问题。
最后,无论选择哪种方式,保持一致性是最重要的。在项目中应该统一使用一种方法,提高代码维护性