基于字典的格式化表达式 | 第二部分 类型与操作 —— 第 7 章: 字符串基础 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
作为一个更高级的扩展,字符串格式还允许在左边的转换目标去查看编码在右边的字典的键,然后获取对应的值。这打开了使用格式化作为一种模板工具的大门。到目前为止只在第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进制字符串的例子,这里不再重复。额外的格式化表达式例子也即将出现,作为和格式化方法(本章的下一个和最后的字符串主题)的对比。