基于字典的格式化表达式

未匹配的标注

作为一个更高级的扩展,字符串格式还允许在左边的转换目标去查看编码在右边的字典的键,然后获取对应的值。这打开了使用格式化作为一种模板工具的大门。到目前为止只在第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进制字符串的例子,这里不再重复。额外的格式化表达式例子也即将出现,作为和格式化方法(本章的下一个和最后的字符串主题)的对比。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~