字符串格式化方法调用——添加键、属性和偏移量
和 %
格式化表达式一样,format 调用可以变得更复杂来支持更高级的用法。比如,format 字符串可以命名对象属性和字典键 —— 和在普通 Python 语法中一样,方括号命名字典键,点代表对象属性,键和对象所属的对象被位置或关键字引用。下面第一个例子以键 “kind” 索引了一个字典,然后获取了已导入 sys
模块对象的属性 “platform”。第二个是一样的,但是用关键字命名对象而非位置:
>>> import sys
>>> 'My {1[kind]} runs {0.platform}'.format(sys, {'kind': 'laptop'})
'My laptop runs win32'
>>> 'My {map[kind]} runs {sys.platform}'.format(sys=sys, map={'kind':'laptop'})
'My laptop runs win32'
在 format 字符串中的方括号也可以命名列表(和其它序列的)偏移量来执行索引操作,但在 format 字符串中只有正偏移量才在语法上有效,所以这个特性不如想象的那么通用。和 %
表达式一样,要命名负偏移量或切片,或通常使用任意的表达式结果,必须在 format 字符串外面运行表达式(注意这里使用 *parts
来将元组中的项解压缩为一个个单独的函数参数,和在第 5 章中学习分数时是一样的;关于这个形式的更多知识请参阅第 18 章):
>>> somelist = list('SPAM')
>>> somelist
['S', 'P', 'A', 'M']
>>> 'first={0[0]}, third={0[2]}'.format(somelist)
'first=S, third=A'
>>> 'first={0[0]}, last={0[-1]}'.format(somelist) # [-1] 在 format 字符串中会失败
TypeError: list indices must be integers or slices, not str
>>> 'first={0}, last={1}'.format(somelist[0], somelist[-1])
'first=S, last=M'
>>> 'first={0[0]}, last={0[1]}, middle={0[1:3]}'.format(somelist) # [1:3] 在 format 字符串中会失败
TypeError: list indices must be integers or slices, not str
>>> parts = somelist[0], somelist[-1], somelist[1:3]
>>> 'first={0}, last={1}, middle={2}'.format(*parts)
"first=S, last=M, middle=['P', 'A']"
# 或者在 2.7/3.1+ 中可以使用 '{}'
>>> 'first={}, last={}, middle={}'.format(*parts)
"first=S, last=M, middle=['P', 'A']"
推荐文章: