基于字典的格式化表达式
作为一个更高级的扩展,字符串格式还允许在左边的转换目标去查看编码在右边的字典的键,然后获取对应的值。这打开了使用格式化作为一种模板工具的大门。到目前为止只在第 4 章中简要地学习了字典,但下面是一个展示基础知识的例子:
>>> '%(qty)d more %(food)s' % {'qty': 1, 'food': 'spam'}
'1 more spam'
在这里,在左边格式字符串中的 (qty)
和 (food)
去查看右边字典字面量中的键并获取它们相对应的值。产生文本如 HTML 或 XML 的程序通常使用这个技术 —— 可以构建一个值的字典,然后用一个使用基于键引用的格式化表达式一次性替换它们(注意第一个注释是在三引号上,所以它没有被添加到字符串中,并且我在 IDLE 中键入这个,没有持续行的 "..." 提示符):
>>> # 带替换目标的模板
>>> reply = """
Greetings...
Hello %(name)s!
Your age is %(age)s
"""
>>> values = {'name': 'Bob', 'age': 40} # 构建值来替换
>>> print(reply % values) # 执行替换
Greetings...
Hello Bob!
Your age is 40
这个技巧还和 vars
内置函数(它返回一个字典,该字典包含了自己被调用所在的地方存在的所有变量)一起使用:
>>> food = 'spam'
>>> qty = 10
>>> vars()
{'food': 'spam', 'qty': 10, ...plus built-in names set by Python... }
当 vars
被使用在格式化操作的右边时,这个技巧允许格式字符串通过名称去引用变量 —— 就像字典键一样:
>>> '%(qty)d more %(food)s' % vars() # 变量是 vars() 中的键
'10 more spam'
在第 8 章将更深入研究字典。还请参阅第 5 章中使用 %x
和 %o
格式化表达式目标码转换为 16 进制和 8 进制字符串的例子,这里不再重复。额外的格式化表达式例子也即将出现,作为和格式化方法(本章的下一个和最后的字符串主题)的对比。
推荐文章: