高级字符串格式与模板字符串

新手上路,请多包涵
阅读 527
2 个回答

模板意味着比通常的字符串格式更简单,但要以表现力为代价。 PEP 292 的基本原理将模板与 Python 的 % 风格的字符串格式进行比较:

Python 目前支持基于 C 的 printf() ‘%’ 格式化字符的字符串替换语法。虽然相当丰富,但 % 格式化代码也容易出错,即使对于经验丰富的 Python 程序员也是如此。一个常见的错误是省略尾随格式字符,例如 s 中的 %(name)s

此外,% 符号后面的规则相当复杂,而通常的应用程序很少需要这么复杂。大多数脚本需要做一些字符串插值,但大多数使用简单的“字符串化”格式,即 %s%(name)s 这种形式应该更简单,更不容易出错。

虽然新的 .format() 改善了这种情况,但 格式字符串语法 仍然相当复杂,因此基本原理仍然有其意义。

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

字符串模板的一个主要优点是您可以使用 safe_substitute 方法 仅替换 部分 占位符。如果未向占位符传递值,普通格式字符串将引发错误。例如:

 "Hello, {first} {last}".format(first='Joe')

提出:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'last'

但:

 from string import Template
Template("Hello, $first $last").safe_substitute(first='Joe')

生产:

 'Hello, Joe $last'

请注意,返回值是一个字符串,而不是 Template ;如果您想替换 $last 您需要从该字符串创建一个新的 Template 对象。

原文由 bwk 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题