在最简单的情况下,替换字段没有名称或将索引用作名称。
>>> "{}, {} and {}".format("first", "second", "third")
'first, second and third'
>>> "{0}, {1} and {2}".format("first", "second", "third")
'first, second and third'
然而,索引无需像上面这样按顺序排列。
>>> "{3} {0} {2} {1} {3} {0}".format("be", "not", "or", "to")
'to be or not to be'
命名字段的工作原理与你预期的完全相同。
>>> from math import pi
>>> "{name} is approximately {value:.2f}.".format(value=pi, name="π")
'π is approximately 3.14.'
当然,关键字参数的排列顺序无关紧要。在这里,我还指定了格式说明符.2f,并使用冒号将其与字段名隔开。它意味着要使用包含2位小数的浮点数格式。如果没有指定.2f,结果将如下:
>>> "{name} is approximately {value}.".format(value=pi, name="π")
'π is approximately 3.141592653589793.'
最后,在Python 3.6中,如果变量与替换字段同名,还可使用一种简写。在这种情况下,可使用f字符串——在字符串前面加上f。
>>> from math import e
>>> f"Euler's constant is roughly {e}."
"Euler's constant is roughly 2.718281828459045."
在这里,创建最终的字符串时,将把替换字段e替换为变量e的值。这与下面这个更明确一些的表达式等价:
>>> "Euler's constant is roughly {e}.".format(e=e)
"Euler's constant is roughly 2.718281828459045."
#混合使用**未命名参数 **和**命名参数**
"{foo} {} {bar}{}".format(1,2, bar =4, foo=3)
'3 1 4 2'
#通过索引来指定未命名参数
"{foo} {1} {bar}{0}".format(1,2, bar =4, foo=3)
'3 2 4 1'
然而,不能同时使用手工编号和自动编号
还可以访问值的组成部分
>>> fullname = ["Alfred", "Smoketoomuch"]
>>> "Mr {name[1]}".format(name=fullname)
'Mr Smoketoomuch'
>>> import math
>>> tmpl = "The {mod.__name__} module defines the value {mod.pi} for π"
>>> tmpl.format(mod=math)
'The math module defines the value 3.141592653589793 for π'
如你所见,可使用索引,还可使用句点表示法来访问导入的模块中的方法、属性、变量和函数(看起来很怪异的变量__name__包含指定模块的名称)。
指定要在字段中包含的值后,就可添加有关如何设置其格式的指令了。首先,可以提供一个
转换标志。
>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' '\u03c0'
上述三个标志(s、r和a)指定分别使用str、repr和ascii进行转换。函数str通常创建外观普通的字符串版本(这里没有对输入字符串做任何处理)。函数repr尝试创建给定值的Python表示(这里是一个字符串字面量)。函数ascii创建只包含ASCII字符的表示,
表3-1 字符串格式设置中的类型说明符
类型 | 含 义 |
---|---|
b | 将整数表示为二进制数 |
c | 将整数解读为Unicode码点 |
d | 将整数视为十进制数进行处理,这是整数默认使用的说明符 |
e | 使用科学表示法来表示小数(用e来表示指数) |
E | 与e相同,但使用E来表示指数 |
f | 将小数表示为定点数 |
F | 与f相同,但对于特殊值(nan和inf),使用大写表示 |
g | 自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数 |
G | 与g相同,但使用大写来表示指数和特殊值 |
n | 与g相同,但插入随区域而异的数字分隔符 |
o | 将整数表示为八进制数 |
s | 保持字符串的格式不变,这是默认用于字符串的说明符 |
x | 将整数表示为十六进制数并使用小写字母 |
X | 与x相同,但使用大写字母 |
% | 将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%) |